Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Commit a98bb9e85990caf499849fccbcf2c4fbb4c482f7


Parents : 8b30976
Author : Ivan <ivan@quad4.io>
Signature : Invalid signer <e46112d44649266d71fe2193e00a4710>, author is <ivan@quad4.io>
Date : 2026-07-09T11:52:58-05:00

feat(locales): update translations for various languages

Changes
Diff

diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json
index 104fe363..ccb08ae6 100644
--- a/meshchatx/src/frontend/locales/de.json
+++ b/meshchatx/src/frontend/locales/de.json
@@ -258,7 +258,7 @@
"inbound_stamp_cost_label": "Kosten für eingehende Stempel",
"propagation_stamp_cost_label": "Kosten für Propagationsstempel",
"page_archiver": "Seitenarchivierer",
- "smart_crawler": "Smart Crawler",
+ "smart_crawler": "Intelligenter Crawler",
"authentication": "Authentifizierung",
"stranger_protection": "Fremdenschutz",
"stranger_protection_description": "Steuern Sie, wie die App Nachrichten und Anhänge von unbekannten Peers behandelt.",
@@ -288,7 +288,7 @@
"libretranslate_url": "LibreTranslate-URL",
"libretranslate_url_description": "Die URL, unter der die LibreTranslate-API erreichbar ist.",
"system": "System",
- "reticulum_stack": "Reticulum Stack",
+ "reticulum_stack": "Reticulum-Stack",
"reticulum_stack_description": "Verwalten Sie den zugrunde liegenden Reticulum Network Stack.",
"reload_rns": "RNS neu laden",
"reload_rns_description": "Meldet alle Ziele ab, stoppt die aktuelle RNS-Instanz und lädt sie neu. Dies ist nützlich, um Konfigurationsänderungen zu übernehmen oder den Mesh-Netzwerk-Stack neu zu starten, ohne die gesamte Anwendung neu zu starten.",
@@ -417,41 +417,41 @@
"telemetry_trust_grant": "Für Telemetrie vertrauen",
"location_manage_desc": "Verwalten Sie, wie Ihr Standort geteilt wird.",
"restart_rns": "RNS neu starten",
- "flood_protection": "Flood Protection",
- "flood_protection_description": "Automatically raise the inbound stamp cost when receiving too many messages per minute from many sources. This makes coordinated spam attacks computationally expensive while keeping normal conversations affordable.",
- "flood_protection_enabled": "Enable auto-adjusting stamp cost",
- "flood_threshold": "Messages per minute threshold",
- "flood_max_stamp_cost": "Maximum stamp cost during flood",
- "flood_cooldown": "Cooldown before lowering cost (seconds)",
+ "flood_protection": "Überflutungsschutz",
+ "flood_protection_description": "Erhöht automatisch die eingehenden Stempelkosten, wenn zu viele Nachrichten pro Minute aus vielen Quellen empfangen werden. Dies macht koordinierte Spam-Angriffe rechenintensiv, während normale Unterhaltungen erschwinglich bleiben.",
+ "flood_protection_enabled": "Automatische Anpassung der Stempelkosten aktivieren",
+ "flood_threshold": "Schwellenwert für Nachrichten pro Minute",
+ "flood_max_stamp_cost": "Maximale Stempelkosten bei Überflutung",
+ "flood_cooldown": "Abklingzeit vor Kostensenkung (Sekunden)",
"relay_chat": "Relais-Chat",
- "desktop_tray_enabled": "System tray integration",
- "desktop_tray_enabled_description": "Keep a tray icon so MeshChatX can hide to the background instead of quitting.",
- "desktop_close_behavior": "When closing the window",
- "desktop_close_behavior_description": "Choose whether closing the window quits, hides to the tray/taskbar, or asks each time.",
- "desktop_close_behavior_ask": "Ask every time",
- "desktop_close_behavior_quit": "Quit application",
- "desktop_close_behavior_background": "Keep running in background",
- "desktop_close_behavior_background_no_tray": "Minimize to taskbar",
- "share_reticulum_instance": "Share Reticulum Instance",
- "share_reticulum_instance_description": "Make this MeshChatX Reticulum instance available to other local programs (Sideband-style shared instance). Other apps can use connectivity without Transport enabled.",
- "obfuscate_hops": "Obfuscate Hops",
- "obfuscate_hops_description": "When enabled, Reticulum applies a random local hop delta (RNS local_hops_delta) so outbound traffic does not advertise a true zero-hop origin to the wider mesh.",
- "respond_to_probes": "Respond to Probes",
- "respond_to_probes_description": "Allow this instance to answer Reticulum probe requests from the network.",
- "enable_remote_management": "Enable Remote Management",
- "enable_remote_management_description": "Allow remote management of this Reticulum instance when configured in the RNS config.",
- "shared_instance_type": "Shared Instance Type",
- "shared_instance_type_default": "Platform default",
- "shared_instance_type_description": "Use TCP when domain sockets are unavailable (common on Android). Leave default otherwise.",
- "instance_name": "Instance Name",
- "instance_name_description": "Isolate multiple shared instances on one system. Default is usually fine.",
- "rpc_config": "RPC Access",
- "rpc_config_description": "Copy these lines into another program's [reticulum] section for full shared-instance RPC access (management, interface status, path info).",
- "rpc_config_unavailable": "RPC key is not available yet. Start Reticulum as a shared instance first.",
- "rpc_config_copied": "RPC config copied to clipboard",
- "copy_rpc_config": "Copy RPC Config",
- "connected_to_shared_instance": "This MeshChatX process is attached to an external shared Reticulum instance. Edit that instance's config to change share/RPC settings.",
- "copy_failed": "Failed to copy to clipboard",
+ "desktop_tray_enabled": "System-Tray-Integration",
+ "desktop_tray_enabled_description": "Ein Tray-Symbol behalten, damit MeshChatX in den Hintergrund ausgeblendet werden kann, anstatt zu beenden.",
+ "desktop_close_behavior": "Beim Schließen des Fensters",
+ "desktop_close_behavior_description": "Wählen Sie, ob das Schließen des Fensters die Anwendung beendet, sie in den Infobereich/die Taskleiste ausblendet oder jedes Mal fragt.",
+ "desktop_close_behavior_ask": "Jedes Mal fragen",
+ "desktop_close_behavior_quit": "Anwendung beenden",
+ "desktop_close_behavior_background": "Im Hintergrund weiter ausführen",
+ "desktop_close_behavior_background_no_tray": "In die Taskleiste minimieren",
+ "share_reticulum_instance": "Reticulum-Instanz teilen",
+ "share_reticulum_instance_description": "Machen Sie diese MeshChatX-Reticulum-Instanz für andere lokale Programme verfügbar (Sideband-artige gemeinsam genutzte Instanz). Andere Apps können die Konnektivität nutzen, ohne dass Transport aktiviert ist.",
+ "obfuscate_hops": "Hops verschleiern",
+ "obfuscate_hops_description": "Wenn aktiviert, wendet Reticulum eine zufällige lokale Hop-Delta (RNS local_hops_delta) an, sodass ausgehender Datenverkehr keinen echten Null-Hop-Ursprung im weiteren Mesh preisgibt.",
+ "respond_to_probes": "Auf Sonden antworten",
+ "respond_to_probes_description": "Erlauben Sie dieser Instanz, auf Reticulum-Sondenanfragen aus dem Netzwerk zu antworten.",
+ "enable_remote_management": "Fernverwaltung aktivieren",
+ "enable_remote_management_description": "Ermöglicht die Fernverwaltung dieser Reticulum-Instanz, wenn dies in der RNS-Konfiguration konfiguriert ist.",
+ "shared_instance_type": "Typ der gemeinsam genutzten Instanz",
+ "shared_instance_type_default": "Plattformstandard",
+ "shared_instance_type_description": "Verwenden Sie TCP, wenn Domain-Sockets nicht verfügbar sind (häufig auf Android). Lassen Sie ansonsten die Standardeinstellung.",
+ "instance_name": "Instanzname",
+ "instance_name_description": "Mehrere gemeinsam genutzte Instanzen auf einem System isolieren. Die Standardeinstellung ist in der Regel in Ordnung.",
+ "rpc_config": "RPC-Zugriff",
+ "rpc_config_description": "Kopieren Sie diese Zeilen in den [reticulum]-Abschnitt eines anderen Programms für vollständigen gemeinsam genutzten Instanz-RPC-Zugriff (Verwaltung, Schnittstellenstatus, Pfadinformationen).",
+ "rpc_config_unavailable": "RPC-Schlüssel ist noch nicht verfügbar. Starten Sie Reticulum zuerst als gemeinsam genutzte Instanz.",
+ "rpc_config_copied": "RPC-Konfiguration in die Zwischenablage kopiert",
+ "copy_rpc_config": "RPC-Konfiguration kopieren",
+ "connected_to_shared_instance": "Dieser MeshChatX-Prozess ist mit einer externen gemeinsam genutzten Reticulum-Instanz verbunden. Bearbeiten Sie die Konfiguration dieser Instanz, um die Share/RPC-Einstellungen zu ändern.",
+ "copy_failed": "In Zwischenablage kopieren fehlgeschlagen",
"rpc_key_hidden": "Verborgen — tippen zum Anzeigen",
"rpc_key_show": "RPC-Schlüssel anzeigen",
"rpc_key_hide": "RPC-Schlüssel verbergen",
@@ -481,19 +481,19 @@
"search": "Werkzeuge suchen...",
"no_results": "Keine Werkzeuge gefunden",
"error": "Fehler",
- "continue": "Continue",
- "success": "Success",
- "warning": "Warning",
+ "continue": "Fortfahren",
+ "success": "Erfolg",
+ "warning": "Warnung",
"info": "Info",
- "copied": "Copied to clipboard",
+ "copied": "In die Zwischenablage kopiert",
"failed_to_copy": "Kopieren in Zwischenablage fehlgeschlagen",
"save_failed": "Konfiguration speichern fehlgeschlagen!",
- "invalid_address": "Invalid Address",
+ "invalid_address": "Ungültige Adresse",
"loading": "Laden...",
"ok": "OK",
- "copy": "Copy",
- "copy_to_clipboard": "Copy to clipboard",
- "clear": "Clear"
+ "copy": "Kopieren",
+ "copy_to_clipboard": "In die Zwischenablage kopieren",
+ "clear": "Löschen"
},
"stickers": {
"settings_title": "Sticker",
@@ -704,21 +704,21 @@
"plugins": {
"settings": {
"title": "Plugins",
- "description": "Install, enable, and review permissions for MeshChatX plugins. ZIP and WASM installs show a confirmation dialog with permissions, signature status, and security findings.",
+ "description": "Installieren, aktivieren und Berechtigungen für MeshChatX-Plugins verwalten. ZIP- und WASM-Installationen zeigen einen Bestätigungsdialog mit Berechtigungen, Signaturstatus und Sicherheitshinweisen.",
"enable": "Aktivieren",
"disable": "Deaktivieren",
"remove": "Entfernen",
"permissions": "Berechtigungen",
- "install_zip": "Install plugin from ZIP or WASM bundle",
+ "install_zip": "Plugin aus ZIP- oder WASM-Bundle installieren",
"enabled": "Plugin aktiviert",
"disabled": "Plugin deaktiviert",
"removed": "Plugin entfernt",
"installed": "Plugin installiert",
"auto_disabled": "Plugin automatisch deaktiviert: {reason}",
"kill_switch": "Ein Plugin wurde deaktiviert: {reason}",
- "empty_state": "No plugins installed yet. Upload a plugin ZIP or WASM bundle to get started.",
- "drag_drop": "Drag and drop a plugin ZIP or WASM bundle here",
- "choose_file": "Choose ZIP or WASM file",
+ "empty_state": "Noch keine Plugins installiert. Laden Sie ein Plugin-ZIP oder WASM-Bundle hoch, um zu beginnen.",
+ "drag_drop": "Ziehen Sie ein Plugin-ZIP oder WASM-Bundle hierher",
+ "choose_file": "ZIP- oder WASM-Datei auswählen",
"confirm_remove": "Plugin \"{name}\" entfernen? Dateien und gespeicherte Daten werden gelöscht.",
"badge_enabled": "Aktiv",
"badge_disabled": "Inaktiv",
@@ -726,97 +726,97 @@
"badge_wasm": "WASM",
"install_failed": "Plugin-Installation fehlgeschlagen: {reason}",
"installing": "Plugin wird installiert...",
- "badge_network": "Network",
- "network_endpoints": "Network endpoints",
- "previewing": "Reviewing plugin...",
+ "badge_network": "Netzwerk",
+ "network_endpoints": "Netzwerkendpunkte",
+ "previewing": "Plugin wird überprüft...",
"badge_python": "Python",
- "badge_signed": "Signed",
- "badge_trusted": "Trusted",
- "badge_invalid_signature": "Invalid signature",
- "badge_tampered": "Tampered"
+ "badge_signed": "Signiert",
+ "badge_trusted": "Vertrauenswürdig",
+ "badge_invalid_signature": "Ungültige Signatur",
+ "badge_tampered": "Manipuliert"
},
"permissions": {
- "none": "No elevated permissions",
- "hooks.announce.received": "Receive mesh announce events",
- "hooks.rns.link.event": "Receive RNS link packet and close events",
- "managers.destinationPath.read": "Read the Reticulum path table",
- "managers.rnsLink.open": "Open RNS links to destinations",
- "managers.rnsLink.identify": "Identify on RNS links",
- "managers.rnsLink.request": "Send request/response over RNS links",
- "managers.rnsLink.send": "Send packets over RNS links",
- "managers.rnsLink.close": "Close RNS links",
- "storage.isolated": "Use isolated plugin storage",
- "network.fetch": "Make outbound internet HTTP requests"
+ "none": "Keine erhöhten Berechtigungen",
+ "hooks.announce.received": "Mesh-Ankündigungsereignisse empfangen",
+ "hooks.rns.link.event": "RNS-Link-Paket- und Schließereignisse empfangen",
+ "managers.destinationPath.read": "Reticulum-Pfadtabelle lesen",
+ "managers.rnsLink.open": "RNS-Links zu Zielen öffnen",
+ "managers.rnsLink.identify": "Auf RNS-Links identifizieren",
+ "managers.rnsLink.request": "Anfrage/Antwort über RNS-Links senden",
+ "managers.rnsLink.send": "Pakete über RNS-Links senden",
+ "managers.rnsLink.close": "RNS-Links schließen",
+ "storage.isolated": "Isolierten Plugin-Speicher verwenden",
+ "network.fetch": "Ausgehende Internet-HTTP-Anfragen stellen"
},
"install_dialog": {
- "title": "Install plugin",
- "network_title": "Install plugin with network access",
- "message": "Review permissions for \"{name}\" ({id}) before installing.",
- "permissions": "Requested permissions",
- "permissions_hint": "Uncheck any permission you do not want to grant. Denied capabilities stay unavailable at runtime.",
- "grant": "Allow",
- "network_endpoints": "External network endpoints",
- "network_endpoints_blocked": "Network access is not granted. These URLs will remain blocked.",
- "network_endpoints_unknown": "This plugin requests network access but did not declare specific endpoints.",
- "cancel": "Cancel",
- "confirm": "Install",
- "close": "Close",
- "signature": "Signature",
+ "title": "Plugin installieren",
+ "network_title": "Plugin mit Netzwerkzugriff installieren",
+ "message": "Überprüfen Sie die Berechtigungen für \"{name}\" ({id}) vor der Installation.",
+ "permissions": "Angeforderte Berechtigungen",
+ "permissions_hint": "Deaktivieren Sie jede Berechtigung, die Sie nicht gewähren möchten. Verweigerte Fähigkeiten bleiben zur Laufzeit nicht verfügbar.",
+ "grant": "Erlauben",
+ "network_endpoints": "Externe Netzwerkendpunkte",
+ "network_endpoints_blocked": "Netzwerkzugriff wird nicht gewährt. Diese URLs bleiben blockiert.",
+ "network_endpoints_unknown": "Dieses Plugin fordert Netzwerkzugriff an, hat aber keine spezifischen Endpunkte deklariert.",
+ "cancel": "Abbrechen",
+ "confirm": "Installieren",
+ "close": "Schließen",
+ "signature": "Signatur",
"signature_unsigned": "Unsigned",
- "signature_signed": "Signed",
- "signature_trusted": "Trusted publisher",
- "signature_invalid": "Invalid signature (install blocked)",
- "trust_publisher": "Trust this publisher",
- "security_findings": "Security findings"
+ "signature_signed": "Signiert",
+ "signature_trusted": "Vertrauenswürdiger Herausgeber",
+ "signature_invalid": "Ungültige Signatur (Installation blockiert)",
+ "trust_publisher": "Diesem Herausgeber vertrauen",
+ "security_findings": "Sicherheitsergebnisse"
},
"sideband": {
- "title": "Sideband plugins",
- "description": "Optional Sideband-compatible Python plugins loaded from a directory. They run in-process with full host access when enabled.",
- "master_enable": "Enable Sideband plugin loader (dangerous)",
- "command_enable": "Enable Sideband command plugins",
- "path": "Plugin directory path",
- "save": "Save Sideband settings",
- "reload": "Reload Sideband plugins",
- "loaded": "Loaded Sideband plugins",
- "saved": "Sideband plugin settings saved",
- "reloaded": "Sideband plugins reloaded",
- "danger_confirm": "Sideband plugins run as full Python code inside MeshChatX with filesystem, network, and LXMF access. Enable only if you trust every script in the directory."
+ "title": "Sideband-Plugins",
+ "description": "Optionale Sideband-kompatible Python-Plugins, die aus einem Verzeichnis geladen werden. Sie laufen im Prozess mit vollem Host-Zugriff, wenn aktiviert.",
+ "master_enable": "Sideband-Plugin-Lader aktivieren (gefährlich)",
+ "command_enable": "Sideband-Befehls-Plugins aktivieren",
+ "path": "Plugin-Verzeichnispfad",
+ "save": "Sideband-Einstellungen speichern",
+ "reload": "Sideband-Plugins neu laden",
+ "loaded": "Geladene Sideband-Plugins",
+ "saved": "Sideband-Plugin-Einstellungen gespeichert",
+ "reloaded": "Sideband-Plugins neu geladen",
+ "danger_confirm": "Sideband-Plugins werden als vollständiger Python-Code innerhalb von MeshChatX mit Dateisystem-, Netzwerk- und LXMF-Zugriff ausgeführt. Aktivieren Sie dies nur, wenn Sie jedem Skript im Verzeichnis vertrauen."
}
},
"selftest": {
"title": "System-Selbsttest",
- "description": "Run diagnostic checks for the network stack, database, identity, imports, storage, LXMF, subprocess/run-module, SQLite, identity files, loopback TCP, unicode paths, RNode helpers, bot launcher argv, HTTP status/config/health/auth/bots/security/interfaces/reticulum-instance/identities/favourites/telephone/plugins/sideband/RRC APIs, plugin runtime, WebSocket, RNS Link API, and bot lifecycle.",
+ "description": "Führen Sie Diagnoseprüfungen für den Netzwerk-Stack, die Datenbank, Identität, Importe, Speicher, LXMF, Subprozess/Run-Modul, SQLite, Identitätsdateien, Loopback-TCP, Unicode-Pfade, RNode-Helfer, Bot-Launcher-Argv, HTTP-Status/Konfiguration/Gesundheit/Authentifizierung/Bots/Sicherheit/Schnittstellen/Reticulum-Instanz/Identitäten/Favoriten/Telefon/Plugins/Sideband/RRC-APIs, Plugin-Laufzeit, WebSocket, RNS-Link-API und Bot-Lebenszyklus durch.",
"run_test_btn": "Diagnose ausführen",
"running": "Diagnose läuft...",
"stack_up": "Netzwerk-Stack",
"config_good": "Konfigurationsintegrität",
"db_good": "Datenbankverbindung",
"read_write": "Speicher Lese/Schreib",
- "identity_good": "Identity Loaded",
- "imports_good": "Critical Imports",
- "storage_lock_good": "Storage Lock",
- "temp_fs_good": "Temp Filesystem",
- "public_assets_good": "Public Assets",
- "lxmf_router_good": "LXMF Router",
- "subprocess_good": "Subprocess Spawn",
- "run_module_good": "MeshChatX Run-Module",
- "sqlite_roundtrip": "SQLite Roundtrip",
- "identity_roundtrip": "Identity File Roundtrip",
- "loopback_tcp": "Loopback TCP Bind",
- "unicode_path_good": "Unicode Path I/O",
- "rnode_support_good": "RNode Support Module",
+ "identity_good": "Identität geladen",
+ "imports_good": "Kritische Importe",
+ "storage_lock_good": "Speichersperre",
+ "temp_fs_good": "Temporäres Dateisystem",
+ "public_assets_good": "Öffentliche Assets",
+ "lxmf_router_good": "LXMF-Router",
+ "subprocess_good": "Unterprozess-Spawn",
+ "run_module_good": "MeshChatX-Ausführungsmodul",
+ "sqlite_roundtrip": "SQLite-Roundtrip",
+ "identity_roundtrip": "Identitätsdatei-Roundtrip",
+ "loopback_tcp": "Loopback-TCP-Bindung",
+ "unicode_path_good": "Unicode-Pfad-I/O",
+ "rnode_support_good": "RNode-Supportmodul",
"bot_launcher_good": "Bot Launcher Argv",
- "http_status_good": "HTTP Status",
+ "http_status_good": "HTTP-Status",
"http_app_info_good": "HTTP App Info",
- "http_config_good": "HTTP Config",
- "http_db_health_good": "HTTP Database Health",
+ "http_config_good": "HTTP-Konfiguration",
+ "http_db_health_good": "HTTP Datenbank-Gesundheit",
"http_auth_csrf_good": "HTTP Auth CSRF",
"http_bots_status_good": "HTTP Bots Status",
- "http_security_good": "HTTP Server Security",
- "http_interfaces_good": "HTTP RNS Interfaces",
- "http_identities_good": "HTTP Identities",
- "http_favourites_good": "HTTP Favourites",
- "http_telephone_good": "HTTP Telephone Status",
+ "http_security_good": "HTTP Server Sicherheit",
+ "http_interfaces_good": "HTTP RNS Schnittstellen",
+ "http_identities_good": "HTTP Identitäten",
+ "http_favourites_good": "HTTP Favoriten",
+ "http_telephone_good": "HTTP Telefon Status",
"websocket_good": "WebSocket",
"bots_lifecycle": "Bot Erstellen / Starten / Stoppen / Löschen",
"passed": "Bestanden",
@@ -824,17 +824,17 @@
"status_label": "Status",
"reason_label": "Grund",
"checks_completed": "Alle Prüfungen erfolgreich bestanden.",
- "http_reticulum_instance_good": "HTTP RNS Instance Settings",
+ "http_reticulum_instance_good": "HTTP RNS Instanzeinstellungen",
"expand_reason": "Fehlerdetails anzeigen",
"collapse_reason": "Fehlerdetails ausblenden",
- "http_plugins_good": "HTTP Plugins API",
- "http_plugins_trust_good": "HTTP Plugin Trust List",
- "http_sideband_plugins_good": "HTTP Sideband Plugins",
- "http_sideband_config_good": "HTTP Sideband Config",
- "http_rrc_hubs_good": "HTTP RRC Hubs",
- "http_rrc_servers_good": "HTTP RRC Servers",
- "plugins_runtime_good": "Plugin Manager Runtime",
- "websocket_rns_link_good": "WebSocket RNS Link API"
+ "http_plugins_good": "HTTP-Plugins-API",
+ "http_plugins_trust_good": "HTTP Plugin Vertrauensliste",
+ "http_sideband_plugins_good": "HTTP-Sideband-Plugins",
+ "http_sideband_config_good": "HTTP Sideband Konfiguration",
+ "http_rrc_hubs_good": "HTTP-RRC-Hubs",
+ "http_rrc_servers_good": "HTTP RRC Server",
+ "plugins_runtime_good": "Plugin-Manager-Laufzeit",
+ "websocket_rns_link_good": "WebSocket-RNS-Link-API"
},
"maintenance": {
"title": "Wartung & Daten",
@@ -921,16 +921,16 @@
"upload_key_file": "Upload key file",
"paste_base32": "Paste Base32",
"paste_base32_placeholder": "Paste your base32 identity key here...",
- "confirm_restore": "Confirm restore",
- "restoring": "Restoring...",
+ "confirm_restore": "Wiederherstellung bestätigen",
+ "restoring": "Wiederherstellen...",
"identity_exported": "Identity key file exported",
"identity_copied": "Identity Base32 key copied to clipboard",
"identity_export_failed": "Exportieren der Identität fehlgeschlagen",
"identity_copy_failed": "Kopieren der Identität fehlgeschlagen",
"identity_restored": "Identity imported.",
- "identity_restore_failed": "Identity restore failed",
- "no_identity_available": "No identity available",
- "message_count": "{count} messages"
+ "identity_restore_failed": "Identitätswiederherstellung fehlgeschlagen",
+ "no_identity_available": "Keine Identität verfügbar",
+ "message_count": "{count} Nachrichten"
},
"contacts": {
"title": "Kontakte",
@@ -971,8 +971,8 @@
"importing_lxma": "LXMA-Kontakt wird importiert...",
"send_message": "Nachricht senden",
"call_contact": "Anrufen",
- "export_contacts": "Export",
- "import_contacts": "Import",
+ "export_contacts": "Exportieren",
+ "import_contacts": "Importieren",
"export_success": "Kontakte exportiert",
"export_failed": "Export fehlgeschlagen",
"import_success": "{added} Kontakt(e) importiert",
@@ -1039,27 +1039,27 @@
"integrity_backend_error": "Die Backend-Binärdatei der Anwendung (aus ASAR entpackt) scheint sich seit dem letzten Snapshot geändert zu haben. Wenn Sie sie nicht aktualisiert oder geändert haben, prüfen Sie die Änderung.",
"integrity_data_error": "Ihre Identitäts- oder Datenbankdateien scheinen sich geändert zu haben, während die App geschlossen war.",
"integrity_warning_footer": "Dies ist ein Hinweis, keine bestätigte Kompromittierung. Wenn Sie die App aktualisiert oder diese Dateien selbst bearbeitet haben, können Sie bestätigen, um die Basislinie zurückzusetzen.",
- "delete_snapshot_confirm": "Are you sure you want to delete this snapshot?",
- "snapshot_deleted": "Snapshot deleted",
+ "delete_snapshot_confirm": "Sind Sie sicher, dass Sie diesen Schnappschuss löschen möchten?",
+ "snapshot_deleted": "Schnappschuss gelöscht",
"failed_delete_snapshot": "Snapshot löschen fehlgeschlagen",
"delete_backup_confirm": "Sind Sie sicher, dass Sie dieses Backup löschen möchten?",
"backup_deleted": "Backup gelöscht",
"failed_delete_backup": "Backup löschen fehlgeschlagen",
- "database_restored": "Database restored. Relaunching...",
+ "database_restored": "Datenbank wiederhergestellt. Neustart läuft …",
"failed_restore_snapshot": "Snapshot wiederherstellen fehlgeschlagen",
- "restore_snapshot_confirm": "Are you sure you want to restore this snapshot? This will overwrite the current database and require an app relaunch.",
+ "restore_snapshot_confirm": "Sind Sie sicher, dass Sie diesen Schnappschuss wiederherstellen möchten? Dadurch wird die aktuelle Datenbank überschrieben und ein App-Neustart ist erforderlich.",
"restore_from_file": "Aus Datei wiederherstellen",
"restoring": "Wiederherstellen...",
"restore_select_file": "Wählen Sie eine Sicherungsdatei zum Wiederherstellen aus.",
"restore_file_confirm": "Möchten Sie wirklich aus dieser Sicherungsdatei wiederherstellen? Dadurch wird die aktuelle Datenbank überschrieben und ein Neustart der App ist erforderlich.",
"failed_restore_file": "Wiederherstellung aus Datei fehlgeschlagen",
- "integrity_acknowledged": "Integrity issues acknowledged",
- "integrity_acknowledged_reset": "Integrity issues acknowledged and manifest reset",
- "integrity_acknowledge_confirm": "Are you sure you want to acknowledge these integrity issues? This will update the security manifest to match the current state of your files.",
+ "integrity_acknowledged": "Integritätsprobleme bestätigt",
+ "integrity_acknowledged_reset": "Integritätsprobleme bestätigt und Manifest zurückgesetzt",
+ "integrity_acknowledge_confirm": "Sind Sie sicher, dass Sie diese Integritätsprobleme bestätigen möchten? Dadurch wird das Sicherheitsmanifest auf den aktuellen Zustand Ihrer Dateien aktualisiert.",
"failed_acknowledge_integrity": "Bestätigung von Integritätsproblemen fehlgeschlagen",
- "shutdown_sent": "Shutdown command sent to server.",
- "identity_exported": "Identity key file exported",
- "identity_copied": "Identity Base32 key copied to clipboard",
+ "shutdown_sent": "Herunterfahrbefehl an den Server gesendet.",
+ "identity_exported": "Identitätsschlüsseldatei exportiert",
+ "identity_copied": "Identitäts-Base32-Schlüssel in die Zwischenablage kopiert",
"app_name": "MeshChatX",
"automatic_backups_desc": "Automatische tägliche Sicherungen Ihrer Datenbank.",
"automatic_backups_title": "Automatische Backups",
@@ -1154,14 +1154,14 @@
"restart_required": "Neustart erforderlich",
"restart_description": "Reticulum MeshChatX muss neu gestartet werden, damit Schnittstellenänderungen wirksam werden.",
"restart_now": "Jetzt neu starten",
- "failed_enable": "failed to enable interface",
- "failed_disable": "failed to disable interface",
- "delete_confirm": "Are you sure you want to delete this interface? This can not be undone!",
- "failed_delete": "failed to delete interface",
+ "failed_enable": "Aktivieren der Schnittstelle fehlgeschlagen",
+ "failed_disable": "Deaktivieren der Schnittstelle fehlgeschlagen",
+ "delete_confirm": "Sind Sie sicher, dass Sie diese Schnittstelle löschen möchten? Dies kann nicht rückgängig gemacht werden!",
+ "failed_delete": "Löschen der Schnittstelle fehlgeschlagen",
"failed_export_all": "Exportieren von Schnittstellen fehlgeschlagen",
"failed_export_single": "Exportieren der Schnittstelle fehlgeschlagen",
"failed_reload": "Neuladen von Reticulum fehlgeschlagen!",
- "interface_not_found": "The selected interface for editing could not be found.",
+ "interface_not_found": "Die ausgewählte Schnittstelle zum Bearbeiten konnte nicht gefunden werden.",
"discovery_settings_saved": "Erkennungseinstellungen gespeichert",
"discovery_list_refreshed": "Erkannten Schnittstellen aktualisiert.",
"discovery_list_refresh_failed": "Erkannte Schnittstellen konnten nicht aktualisiert werden.",
@@ -1188,8 +1188,8 @@
"no_interfaces_found_config": "Keine Schnittstellen in der ausgewählten Konfigurationsdatei gefunden",
"failed_parse_config": "Parsen der Konfigurationsdatei fehlgeschlagen",
"select_config_file": "Bitte wählen Sie eine Konfigurationsdatei aus",
- "select_at_least_one": "Please select at least one interface to import",
- "import_success": "Interfaces imported successfully. MeshChat must be restarted for these changes to take effect.",
+ "select_at_least_one": "Bitte wählen Sie mindestens eine Schnittstelle zum Importieren aus",
+ "import_success": "Schnittstellen erfolgreich importiert. MeshChat muss neu gestartet werden, damit diese Änderungen wirksam werden.",
"failed_import_all": "Importieren von Schnittstellen fehlgeschlagen",
"add_interface_sidebar_a11y": "Verknüpfungen und Community-Voreinstellungen",
"community_quick_start": "Community-Schnellstart",
@@ -1205,7 +1205,7 @@
"find_more_nodes": "Weitere Knoten finden",
"quick_import": "Schnellimport",
"quick_import_paste_hint": "Rohkonfiguration einfügen",
- "quick_import_placeholder": "[Interface Name]\ntype = TCPClientInterface\ntarget_host = 1.2.3.4",
+ "quick_import_placeholder": "[Schnittstellenname]\ntype = TCPClientInterface\ntarget_host = 1.2.3.4",
"quick_import_apply": "Anwenden: {name}",
"discovered_network_name": "Netzwerkname",
"discovered_passphrase": "Passphrase",
@@ -1238,7 +1238,7 @@
"select_file": "MBTiles-Datei auswählen",
"offline_mode": "Offline-Modus",
"online_mode": "Online-Modus",
- "attribution": "Attribution",
+ "attribution": "Quellenangabe",
"bounds": "Grenzen",
"center": "Zentrum",
"zoom": "Zoom",
@@ -1319,67 +1319,67 @@
"saved_on": "Gespeichert am",
"settings": "Karteneinstellungen",
"go_to_my_location": "Mein Standort",
- "source_updated": "Map source updated",
+ "source_updated": "Kartenquelle aktualisiert",
"failed_set_active": "Aktive Karte setzen fehlgeschlagen",
- "file_deleted": "File deleted",
+ "file_deleted": "Datei gelöscht",
"failed_delete_file": "Datei löschen fehlgeschlagen",
- "storage_saved": "Storage directory saved",
+ "storage_saved": "Speicherverzeichnis gespeichert",
"failed_save_storage": "Verzeichnis speichern fehlgeschlagen",
- "export_cancelled": "Export cancelled",
+ "export_cancelled": "Export abgebrochen",
"failed_cancel_export": "Export abbrechen fehlgeschlagen",
"failed_start_export": "Export starten fehlgeschlagen",
- "select_mbtiles_error": "Please select an .mbtiles file",
+ "select_mbtiles_error": "Bitte wählen Sie eine .mbtiles-Datei aus",
"view_saved": "Standardansicht gespeichert",
"failed_save_view": "Speichern der Standardansicht fehlgeschlagen",
"failed_clear_cache": "Cache leeren fehlgeschlagen",
"failed_save_tile_server": "Speichern der Tile-Server-URL fehlgeschlagen",
"failed_save_nominatim": "Speichern der Nominatim-API-URL fehlgeschlagen",
- "copied_coordinates": "Copied coordinates",
+ "copied_coordinates": "Koordinaten kopiert",
"failed_load_drawings": "Laden von Zeichnungen fehlgeschlagen",
- "not_initialized": "Map not initialized",
- "drawing_saved": "Drawing saved",
+ "not_initialized": "Karte nicht initialisiert",
+ "drawing_saved": "Zeichnung gespeichert",
"failed_save_drawing": "Speichern der Zeichnung fehlgeschlagen",
- "deleted": "Deleted",
+ "deleted": "Gelöscht",
"failed_delete": "Löschen fehlgeschlagen",
- "location_not_determined": "Could not determine your location",
- "geolocation_not_supported": "Geolocation is not supported by your browser",
- "no_nodes_location": "No discovered nodes with location found",
- "failed_fetch_nodes": "Failed to fetch discovered nodes for mapping",
- "share_view": "Share map view (copy links)",
- "share_message_prefix": "MeshChatX map:",
- "share_copied": "Map links copied to clipboard",
- "ping_here": "Ping here (send in chat)",
- "ping_here_toolbar": "Ping map center in chat",
- "ping_modal_title": "Send map ping",
- "ping_destination": "Destination",
- "ping_pick_conversation": "Choose a conversation",
- "ping_send": "Send ping",
- "ping_sent": "Map ping sent",
- "ping_failed": "Could not send map ping",
- "ping_invalid_destination": "Pick a valid 32-character destination hash",
- "ping_message_prefix": "MeshChatX map ping:",
- "north_up": "North is up (map not rotated)",
- "export_tile_limit_exceeded": "Too many tiles for one export. Lower max zoom or shrink the area.",
- "export_region_world": "World (low zoom)",
- "export_region_europe": "Europe",
- "export_region_north_america": "North America",
- "export_region_south_america": "South America",
- "export_region_africa": "Africa",
- "export_region_asia": "Asia",
- "export_region_oceania": "Oceania",
+ "location_not_determined": "Ihr Standort konnte nicht ermittelt werden",
+ "geolocation_not_supported": "Geolokalisierung wird von Ihrem Browser nicht unterstützt",
+ "no_nodes_location": "Keine entdeckten Knoten mit Standort gefunden",
+ "failed_fetch_nodes": "Fehler beim Abrufen der entdeckten Knoten für die Kartierung",
+ "share_view": "Kartenansicht teilen (Links kopieren)",
+ "share_message_prefix": "MeshChatX-Karte:",
+ "share_copied": "Kartenlinks in die Zwischenablage kopiert",
+ "ping_here": "Hier pingen (im Chat senden)",
+ "ping_here_toolbar": "Kartenmittelpunkt im Chat pingen",
+ "ping_modal_title": "Karten-Ping senden",
+ "ping_destination": "Ziel",
+ "ping_pick_conversation": "Wählen Sie eine Unterhaltung",
+ "ping_send": "Ping senden",
+ "ping_sent": "Karten-Ping gesendet",
+ "ping_failed": "Karten-Ping konnte nicht gesendet werden",
+ "ping_invalid_destination": "Wählen Sie einen gültigen 32-stelligen Ziel-Hash",
+ "ping_message_prefix": "MeshChatX Karten-Ping:",
+ "north_up": "Norden ist oben (Karte nicht gedreht)",
+ "export_tile_limit_exceeded": "Zu viele Kacheln für einen Export. Verringern Sie die maximale Zoomstufe oder verkleinern Sie den Bereich.",
+ "export_region_world": "Welt (niedriger Zoom)",
+ "export_region_europe": "Europa",
+ "export_region_north_america": "Nordamerika",
+ "export_region_south_america": "Südamerika",
+ "export_region_africa": "Afrika",
+ "export_region_asia": "Asien",
+ "export_region_oceania": "Ozeanien",
"vector_exchange_title": "GeoJSON / KML / KMZ",
- "vector_exchange_merge": "Merge with existing drawings (uncheck to replace)",
+ "vector_exchange_merge": "Mit vorhandenen Zeichnungen zusammenführen (deaktivieren zum Ersetzen)",
"vector_exchange_hint": "Importe unterstützen Icons aus verschiedenen Formaten wie GeoJSON und KML. Wählen Sie eine Zeichnung aus, um deren Metadaten zu sehen.",
- "vector_import_geojson": "Import GeoJSON",
- "vector_import_kml": "Import KML",
- "vector_import_kmz": "Import KMZ",
- "vector_export_geojson": "Export GeoJSON",
- "vector_export_kml": "Export KML",
- "vector_export_kmz": "Export KMZ",
- "vector_import_ok": "Imported {count} feature(s).",
- "vector_import_empty": "No features found in file.",
- "vector_import_failed": "Could not read vector file.",
- "vector_export_ok": "Export started.",
+ "vector_import_geojson": "GeoJSON importieren",
+ "vector_import_kml": "KML importieren",
+ "vector_import_kmz": "KMZ importieren",
+ "vector_export_geojson": "GeoJSON exportieren",
+ "vector_export_kml": "KML exportieren",
+ "vector_export_kmz": "KMZ exportieren",
+ "vector_import_ok": "{count} Objekt(e) importiert.",
+ "vector_import_empty": "Keine Objekte in der Datei gefunden.",
+ "vector_import_failed": "Vektordatei konnte nicht gelesen werden.",
+ "vector_export_ok": "Export gestartet.",
"drop_geo_files": "Kartendatei hier ablegen",
"drop_map_files_hint": "GeoJSON, KML, KMZ oder MBTiles",
"drop_no_geo_files": "Keine GeoJSON-, KML- oder KMZ-Dateien erkannt.",
@@ -1530,24 +1530,24 @@
"recording": "Aufnahme: {duration}",
"nomad_network_node": "Nomad Network Knoten",
"toggle_source": "Quellcode umschalten",
- "folder_created": "Folder created",
- "failed_create_folder": "Failed to create folder",
- "folder_renamed": "Folder renamed",
- "failed_rename_folder": "Failed to rename folder",
- "folder_deleted": "Folder deleted",
- "failed_delete_folder": "Failed to delete folder",
- "moved_to_folder": "Moved to folder",
- "failed_move_folder": "Failed to move to folder",
- "marked_read": "Marked as read",
- "failed_mark_read": "Failed to mark as read",
- "conversations_deleted": "Conversations deleted",
- "failed_delete_conversations": "Failed to delete conversations",
- "failed_export_folders": "Failed to export folders",
- "folders_imported": "Folders imported",
- "failed_import_folders": "Failed to import folders",
- "failed_read_clipboard": "Failed to read from clipboard",
- "clipboard_read_requires_secure_context": "Clipboard read needs a secure page (https or http://127.0.0.1). Using http://0.0.0.0 or another non-local HTTP origin blocks the Clipboard API—open the app on 127.0.0.1 or https, or paste with Ctrl+V.",
- "clipboard_write_unavailable": "Could not copy automatically. Open on https or http://127.0.0.1, or select the text and copy manually.",
+ "folder_created": "Ordner erstellt",
+ "failed_create_folder": "Ordner konnte nicht erstellt werden",
+ "folder_renamed": "Ordner umbenannt",
+ "failed_rename_folder": "Umbenennen des Ordners fehlgeschlagen",
+ "folder_deleted": "Ordner gelöscht",
+ "failed_delete_folder": "Ordner konnte nicht gelöscht werden",
+ "moved_to_folder": "In Ordner verschoben",
+ "failed_move_folder": "Verschieben in Ordner fehlgeschlagen",
+ "marked_read": "Als gelesen markiert",
+ "failed_mark_read": "Als gelesen markieren fehlgeschlagen",
+ "conversations_deleted": "Unterhaltungen gelöscht",
+ "failed_delete_conversations": "Unterhaltungen konnten nicht gelöscht werden",
+ "failed_export_folders": "Ordner konnten nicht exportiert werden",
+ "folders_imported": "Ordner importiert",
+ "failed_import_folders": "Ordner konnten nicht importiert werden",
+ "failed_read_clipboard": "Lesen aus Zwischenablage fehlgeschlagen",
+ "clipboard_read_requires_secure_context": "Zum Lesen der Zwischenablage wird eine sichere Seite benötigt (https oder http://127.0.0.1). Die Verwendung von http://0.0.0.0 oder einem anderen nicht-lokalen HTTP-Ursprung blockiert die Clipboard-API – öffnen Sie die App auf 127.0.0.1 oder https, oder fügen Sie mit Strg+V ein.",
+ "clipboard_write_unavailable": "Automatisches Kopieren nicht möglich. Öffnen Sie die Seite über https oder http://127.0.0.1, oder markieren Sie den Text und kopieren Sie ihn manuell.",
"oversized_body_notice": "Diese Nachricht ist zu groß, um sie hier anzuzeigen ({count} Zeichen). Kopieren Sie den vollständigen Text, um ihn woanders zu lesen oder zu bearbeiten.",
"oversized_body_copy": "Volltext kopieren",
"oversized_body_copied": "Vollständiger Nachrichtentext kopiert",
@@ -1562,14 +1562,14 @@
"copy_message": "Nachricht kopieren",
"message_copied": "Nachricht kopiert",
"failed_copy_message": "Nachricht konnte nicht kopiert werden",
- "failed_send_ingest": "Failed to send ingest request",
- "address_copied": "Your LXMF address copied to clipboard",
- "map_link_share_title": "Shared map view",
- "map_link_ping_title": "Map ping",
- "map_link_open": "Open on map",
- "map_link_copy_uri": "Copy meshchatx link",
- "map_link_copied": "Map link copied",
- "failed_copy_address": "Failed to copy address",
+ "failed_send_ingest": "Senden der Ingest-Anfrage fehlgeschlagen",
+ "address_copied": "Ihre LXMF-Adresse wurde in die Zwischenablage kopiert",
+ "map_link_share_title": "Geteilte Kartenansicht",
+ "map_link_ping_title": "Karten-Ping",
+ "map_link_open": "Auf Karte öffnen",
+ "map_link_copy_uri": "MeshChatX-Link kopieren",
+ "map_link_copied": "Kartenlink kopiert",
+ "failed_copy_address": "Adresse konnte nicht kopiert werden",
"translation_failed": "Übersetzung fehlgeschlagen",
"translate_select_target": "Übersetzen nach",
"translating_message": "Wird übersetzt...",
@@ -1578,36 +1578,36 @@
"show_translation": "Übersetzung anzeigen",
"translate_message": "Nachricht übersetzen",
"translate_target_invalid": "Wählen Sie eine andere Zielsprache als die Quelle",
- "failed_add_contact": "Failed to add contact",
+ "failed_add_contact": "Kontakt konnte nicht hinzugefügt werden",
"ingesting_paper_message": "Papier-Nachricht wird erfasst...",
- "failed_ingest_paper": "Failed to ingest paper message",
- "enter_display_name": "Enter a custom display name",
- "failed_update_display_name": "Failed to update display name",
- "failed_load_audio": "Failed to load audio attachment.",
- "no_contacts_telephone": "No contacts found in telephone",
- "failed_load_contacts": "Failed to load contacts",
- "location_request_sent": "Location request sent",
+ "failed_ingest_paper": "Papiernachricht konnte nicht eingelesen werden",
+ "enter_display_name": "Benutzerdefinierten Anzeigenamen eingeben",
+ "failed_update_display_name": "Aktualisieren des Anzeigenamens fehlgeschlagen",
+ "failed_load_audio": "Audio-Anhang konnte nicht geladen werden.",
+ "no_contacts_telephone": "Keine Kontakte im Telefon gefunden",
+ "failed_load_contacts": "Kontakte konnten nicht geladen werden",
+ "location_request_sent": "Standortanfrage gesendet",
"failed_send_location_request": "Senden der Standortanfrage fehlgeschlagen",
"fetching_location": "Standort wird abgerufen...",
"location_disabled": "Standortfreigabe ist deaktiviert. Aktivieren Sie sie unter Einstellungen > Standort.",
"location_sent": "Standort erfolgreich geteilt",
"location_requested": "Standort angefordert",
- "remove_image_confirm": "Are you sure you want to remove this image attachment?",
- "failed_start_recording": "failed to start recording",
+ "remove_image_confirm": "Sind Sie sicher, dass Sie diesen Bild-Anhang entfernen möchten?",
+ "failed_start_recording": "Aufnahme starten fehlgeschlagen",
"failed_start_recording_help_mediadevices": "Diese Webansicht stellt keine Mikrofon-API bereit.",
"failed_start_recording_help_web_audio": "Web Audio ist in diesem Browser nicht verfügbar.",
"failed_start_recording_help_audio_worklet": "AudioWorklet wird nicht unterstützt — OPUS-Sprachnotizen benötigen es.",
"failed_start_recording_help_permission": "Mikrofonzugriff erlauben oder erneut versuchen, sobald eine andere App das Mikrofon freigibt.",
- "remove_audio_confirm": "Are you sure you want to remove this audio attachment?",
- "failed_generate_qr": "Failed to generate QR",
- "enter_folder_name": "Enter folder name",
- "new_folder": "New Folder",
- "rename_folder": "Rename folder",
- "failed_render_qr": "Failed to render QR code",
- "uri_copied": "URI copied to clipboard",
- "failed_copy_uri": "Failed to copy URI",
- "paper_message_sent": "Paper message sent successfully",
- "failed_send_paper": "Failed to send paper message",
+ "remove_audio_confirm": "Sind Sie sicher, dass Sie diesen Audio-Anhang entfernen möchten?",
+ "failed_generate_qr": "QR-Code konnte nicht generiert werden",
+ "enter_folder_name": "Ordnernamen eingeben",
+ "new_folder": "Neuer Ordner",
+ "rename_folder": "Ordner umbenennen",
+ "failed_render_qr": "QR-Code-Rendering fehlgeschlagen",
+ "uri_copied": "URI in die Zwischenablage kopiert",
+ "failed_copy_uri": "URI konnte nicht kopiert werden",
+ "paper_message_sent": "Papiernachricht erfolgreich gesendet",
+ "failed_send_paper": "Senden der Papiernachricht fehlgeschlagen",
"failed_load_config": "Konfiguration laden fehlgeschlagen",
"profile_icon_saved": "Profilsymbol erfolgreich gespeichert",
"failed_save_profile_icon": "Profilsymbol speichern fehlgeschlagen",
@@ -1621,44 +1621,44 @@
"banish_confirm": "Möchten Sie diesen Nutzer wirklich verbannen? Er kann Ihnen keine Nachrichten mehr senden oder Verbindungen herstellen.",
"delete_conversation_confirm": "Sind Sie sicher, dass Sie diese Unterhaltung löschen möchten?",
"failed_delete_conversation": "Unterhaltung löschen fehlgeschlagen",
- "delete_history_confirm": "Are you sure you want to delete all messages in this conversation? This can not be undone!",
- "failed_delete_history": "failed to delete history",
- "pin_conversation": "Pin conversation",
- "unpin_conversation": "Unpin conversation",
- "failed_toggle_pin": "Could not update pin",
- "invalid_destination_hash": "Invalid destination hash",
- "invalid_destination_hash_format": "Invalid destination hash format",
- "ping_failed": "Ping failed. Try again later",
+ "delete_history_confirm": "Sind Sie sicher, dass Sie alle Nachrichten in dieser Unterhaltung löschen möchten? Dies kann nicht rückgängig gemacht werden!",
+ "failed_delete_history": "Verlauf konnte nicht gelöscht werden",
+ "pin_conversation": "Unterhaltung anheften",
+ "unpin_conversation": "Unterhaltung loslösen",
+ "failed_toggle_pin": "Pin konnte nicht aktualisiert werden",
+ "invalid_destination_hash": "Ungültiger Ziel-Hash",
+ "invalid_destination_hash_format": "Ungültiges Format des Ziel-Hashs",
+ "ping_failed": "Ping fehlgeschlagen. Versuchen Sie es später erneut",
"ping_in_progress": "Ziel wird angepingt",
- "ping_reply_from": "Valid reply from {hash}",
- "duration": "Duration: {duration}",
- "hops_there": "Hops There: {count}",
- "hops_back": "Hops Back: {count}",
- "signal_quality": "Signal Quality: {quality}%",
+ "ping_reply_from": "Gültige Antwort von {hash}",
+ "duration": "Dauer: {duration}",
+ "hops_there": "Hops hin: {count}",
+ "hops_back": "Hops zurück: {count}",
+ "signal_quality": "Signalqualität: {quality}%",
"rssi_val": "RSSI: {rssi}dBm",
"snr_val": "SNR: {snr}dB",
- "hash_copied": "Identity hash copied to clipboard",
- "failed_to_copy_hash": "Failed to copy identity hash",
+ "hash_copied": "Identitäts-Hash in Zwischenablage kopiert",
+ "failed_to_copy_hash": "Kopieren des Identitäts-Hashs fehlgeschlagen",
"copy_hash": "Hash kopieren",
"reply": "Antworten",
"replying_to": "Antwort an",
- "forward_banner_label": "Forwarded message",
- "forward_you_shared": "You're forwarding this quote",
- "forward_pick_recipient_title": "Forward to contact",
- "forward_message": "Forward",
- "forward_sent": "Message forwarded",
- "forward_failed": "Could not forward message",
- "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
- "forward_verify_show": "Source and verification",
- "forward_verify_hide": "Hide verification",
+ "forward_banner_label": "Weitergeleitete Nachricht",
+ "forward_you_shared": "Sie leiten dieses Zitat weiter",
+ "forward_pick_recipient_title": "An Kontakt weiterleiten",
+ "forward_message": "Weiterleiten",
+ "forward_sent": "Nachricht weitergeleitet",
+ "forward_failed": "Nachricht konnte nicht weitergeleitet werden",
+ "forward_no_lxmf_destination": "Dieser Kontakt hat keine nutzbare LXMF-Zustelladresse.",
+ "forward_verify_show": "Quelle und Verifizierung",
+ "forward_verify_hide": "Verifizierung ausblenden",
"forward_verify_explanation": "Paper LXMF-Links funktionieren nur, wenn die vollständige Nachricht verfügbar ist und in die Paper-Limits passt. Zitierte Ausschnitte können gefälscht sein.",
- "forward_verify_loading": "Looking up verification URI…",
- "forward_verify_open_uri": "Open verification URI",
- "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
- "forward_verify_not_cached": "Original message bytes are not cached here.",
- "forward_verify_failed": "Verification lookup failed.",
- "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
- "forward_open_party_is_self": "That is your own address.",
+ "forward_verify_loading": "Verifizierungs-URI wird gesucht…",
+ "forward_verify_open_uri": "Verifizierungs-URI öffnen",
+ "forward_verify_unavailable": "Die ursprünglichen Nachrichtenbytes sind hier nicht zwischengespeichert, daher konnte keine Verifizierungs-URI erstellt werden.",
+ "forward_verify_not_cached": "Die ursprünglichen Nachrichtenbytes sind hier nicht zwischengespeichert.",
+ "forward_verify_failed": "Verifizierungsabfrage fehlgeschlagen.",
+ "forward_content_stub": "_Weitergeleitet über MeshChatX_\nAnhänge und zitierter Text gehören zum ursprünglichen Absender.",
+ "forward_open_party_is_self": "Das ist Ihre eigene Adresse.",
"message_actions": "Nachrichtenaktionen",
"save_image_to_device": "Bild auf Gerät speichern",
"cancel_send": "Senden abbrechen",
@@ -1730,15 +1730,15 @@
"archiving_page": "Seite wird archiviert...",
"page_archived_successfully": "Seite erfolgreich archiviert.",
"identify_confirm": "Sind Sie sicher, dass Sie sich gegenüber diesem NomadNetwork-Knoten identifizieren möchten? Die Seite wird nach dem Senden Ihrer Identität neu geladen.",
- "failed_rename_favourite": "Failed to rename favourite",
- "banishment_lifted": "Banishment lifted successfully",
- "failed_lift_banishment": "Failed to lift banishment",
- "lift_banishment": "Lift Banishment",
- "enter_section_name": "Enter section name",
- "new_section": "New Section",
- "rename_section": "Rename section",
- "delete_section_confirm": "Delete this section? Favourites will move to the main section.",
- "unsupported_url": "unsupported url: ",
+ "failed_rename_favourite": "Favorit konnte nicht umbenannt werden",
+ "banishment_lifted": "Verbannung erfolgreich aufgehoben",
+ "failed_lift_banishment": "Verbannung konnte nicht aufgehoben werden",
+ "lift_banishment": "Verbannung aufheben",
+ "enter_section_name": "Abschnittsnamen eingeben",
+ "new_section": "Neuer Abschnitt",
+ "rename_section": "Abschnitt umbenennen",
+ "delete_section_confirm": "Diesen Abschnitt löschen? Favoriten werden in den Hauptabschnitt verschoben.",
+ "unsupported_url": "nicht unterstützte URL: ",
"path_away_suffix": "entfernt",
"renderer_chip_micron_js": "Micron JS",
"renderer_chip_micron_wasm": "Micron WASM",
@@ -1756,9 +1756,9 @@
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
"renderer_chip_plaintext": "Text",
- "renderer_hint_markdown": "Markdown renderer",
- "renderer_hint_html": "Sanitized HTML",
- "renderer_hint_plaintext": "Escaped plain text",
+ "renderer_hint_markdown": "Markdown-Renderer",
+ "renderer_hint_html": "Bereinigtes HTML",
+ "renderer_hint_plaintext": "Maskierter Klartext",
"load_phase_default": "Seite wird geladen",
"load_phase_finding_path": "Netzwerkpfad zum Knoten wird gesucht",
"load_phase_establishing_link": "Verbindung zum Knoten wird aufgebaut",
@@ -1791,7 +1791,7 @@
"bulk_add_favourites_done": "{count} Knoten zu Favoriten hinzugefügt",
"bulk_block_nodes": "Verbannen",
"bulk_nothing_to_add_favourites": "Nichts hinzuzufügen (bereits Favoriten oder nichts ausgewählt)",
- "context_tabs": "Tabs",
+ "context_tabs": "Registerkarten",
"close_tabs_to_right": "Tabs rechts schließen",
"close_other_tabs": "Andere Tabs schließen",
"close_all_tabs": "Alle Tabs schließen",
@@ -1843,21 +1843,21 @@
"page_of": "Seite {page} von {total_pages}",
"export_mu": "Als .mu exportieren",
"export_selected_mu": ".mu exportieren ({count})",
- "nodes_title": "Nodes",
- "snapshots_title": "Snapshots",
- "select_all": "Select all",
- "delete_selected": "Delete ({count})",
- "viewing_archive": "Viewing archive",
- "select_snapshot": "Select a snapshot to view",
- "open_live": "Open live",
- "search_nodes_placeholder": "Search nodes or content...",
- "no_results": "No results found",
- "no_archives": "No archives yet",
- "show_nodes": "Show nodes",
- "hide_nodes": "Hide nodes",
- "show_snapshots": "Show snapshots",
- "hide_snapshots": "Hide snapshots",
- "delete_snapshot": "Delete snapshot"
+ "nodes_title": "Knoten",
+ "snapshots_title": "Schnappschüsse",
+ "select_all": "Alle auswählen",
+ "delete_selected": "Löschen ({count})",
+ "viewing_archive": "Archiv anzeigen",
+ "select_snapshot": "Wählen Sie einen Schnappschuss zum Anzeigen aus",
+ "open_live": "Live öffnen",
+ "search_nodes_placeholder": "Knoten oder Inhalt durchsuchen...",
+ "no_results": "Keine Ergebnisse gefunden",
+ "no_archives": "Noch keine Archive",
+ "show_nodes": "Knoten anzeigen",
+ "hide_nodes": "Knoten ausblenden",
+ "show_snapshots": "Schnappschüsse anzeigen",
+ "hide_snapshots": "Schnappschüsse ausblenden",
+ "delete_snapshot": "Schnappschuss löschen"
},
"docs": {
"title": "Dokumentation",
@@ -1940,7 +1940,7 @@
},
"rnsh": {
"title": "RNSH",
- "description": "Manage persistent rnsh sessions"
+ "description": "Persistente rnsh-Sitzungen verwalten"
},
"rnstatus": {
"title": "RNStatus",
@@ -1955,10 +1955,10 @@
"error_drop": "Fehler beim Verwerfen des Pfads",
"failed_request": "Pfad anfordern fehlgeschlagen",
"paths_dropped": "Pfade verworfen",
- "failed_drop_paths": "Failed to drop paths",
- "purge_confirm": "Purge all announce queues? This cannot be undone.",
- "queues_purged": "Announce queues purged",
- "failed_purge": "Failed to purge queues"
+ "failed_drop_paths": "Pfade konnten nicht gelöscht werden",
+ "purge_confirm": "Alle Ankündigungswarteschlangen leeren? Dies kann nicht rückgängig gemacht werden.",
+ "queues_purged": "Ankündigungswarteschlangen geleert",
+ "failed_purge": "Warteschlangen konnten nicht geleert werden"
},
"rnpath_trace": {
"title": "RNS Pfad-Verfolgung",
@@ -2042,91 +2042,91 @@
"flow_no_rules": "Keine Regeln"
},
"message_blocklist": {
- "title": "Message blocklist",
- "description": "Auto-banish senders when their message or name matches a word or regex from your shared blocklist.",
- "beta_notice_title": "Beta (work in progress)",
- "beta_notice_body": "This tool is off until you turn it on. Words match regardless of case. Regex uses normal patterns. If something matches, the sender gets banished right away. Export a list to share with your group, or import one to merge or replace yours.",
- "enable_label": "Enable message blocklist",
- "enable_hint": "When disabled, entries are saved but no automatic banish runs.",
- "entries_heading": "Blocked phrases",
- "add_entry": "Add phrase",
- "empty_entries": "No phrases yet. Add entries or import a shared list.",
- "entry_enabled": "Active",
- "entry_placeholder": "spam phrase or regex pattern",
- "remove_entry": "Remove",
- "scope_label": "Applies to",
- "scope_everyone": "Everyone",
- "scope_contacts": "Contacts only",
- "scope_non_contacts": "Non-contacts only",
- "match_in_label": "Match in",
- "match_message": "Message title and body",
- "match_peer_fields": "Peer display name and contact fields",
- "match_mode_substring": "Word",
+ "title": "Nachrichten-Blockliste",
+ "description": "Absender automatisch verbannen, wenn ihre Nachricht oder ihr Name mit einem Wort oder Regex aus deiner gemeinsamen Blockliste übereinstimmt.",
+ "beta_notice_title": "Beta (in Arbeit)",
+ "beta_notice_body": "Dieses Tool ist deaktiviert, bis du es einschaltest. Wörter werden unabhängig von der Groß-/Kleinschreibung abgeglichen. Regex verwendet normale Muster. Wenn etwas übereinstimmt, wird der Absender sofort verbannt. Exportiere eine Liste, um sie mit deiner Gruppe zu teilen, oder importiere eine, um deine zu ergänzen oder zu ersetzen.",
+ "enable_label": "Nachrichten-Blockliste aktivieren",
+ "enable_hint": "Wenn deaktiviert, werden Einträge gespeichert, aber es erfolgt keine automatische Verbannung.",
+ "entries_heading": "Blockierte Phrasen",
+ "add_entry": "Phrase hinzufügen",
+ "empty_entries": "Noch keine Phrasen. Füge Einträge hinzu oder importiere eine geteilte Liste.",
+ "entry_enabled": "Aktiv",
+ "entry_placeholder": "Spam-Phrase oder Regex-Muster",
+ "remove_entry": "Entfernen",
+ "scope_label": "Gilt für",
+ "scope_everyone": "Alle",
+ "scope_contacts": "Nur Kontakte",
+ "scope_non_contacts": "Nur Nicht-Kontakte",
+ "match_in_label": "Übereinstimmung in",
+ "match_message": "Nachrichtentitel und -text",
+ "match_peer_fields": "Peer-Anzeigename und Kontaktfelder",
+ "match_mode_substring": "Wort",
"match_mode_regex": "Regex",
- "export": "Export",
- "import": "Import",
- "save": "Save",
- "saving": "Saving…",
- "revert": "Reload",
- "saved": "Blocklist saved",
- "save_failed": "Could not save blocklist",
- "load_failed": "Could not load blocklist",
- "enabled_toast": "Message blocklist enabled",
- "disabled_toast": "Message blocklist disabled",
- "exported": "Blocklist exported",
- "export_failed": "Could not export blocklist",
- "import_merge_confirm": "Merge with your current list? Choose Cancel to replace your list entirely.",
- "imported_merge": "Blocklist merged",
- "imported_replace": "Blocklist replaced",
- "import_failed": "Could not import blocklist"
+ "export": "Exportieren",
+ "import": "Importieren",
+ "save": "Speichern",
+ "saving": "Speichern…",
+ "revert": "Neu laden",
+ "saved": "Blockliste gespeichert",
+ "save_failed": "Blockliste konnte nicht gespeichert werden",
+ "load_failed": "Blockliste konnte nicht geladen werden",
+ "enabled_toast": "Nachrichten-Blockliste aktiviert",
+ "disabled_toast": "Nachrichten-Blockliste deaktiviert",
+ "exported": "Blockliste exportiert",
+ "export_failed": "Blockliste konnte nicht exportiert werden",
+ "import_merge_confirm": "Mit deiner aktuellen Liste zusammenführen? Wähle Abbrechen, um deine Liste vollständig zu ersetzen.",
+ "imported_merge": "Blockliste zusammengeführt",
+ "imported_replace": "Blockliste ersetzt",
+ "import_failed": "Blockliste konnte nicht importiert werden"
},
"repository_server": {
"title": "Repository-Server",
"description": "Verteilen Sie MeshChatX- und Reticulum-bezogene Python-Wheels sowie eigene Dateien über einfaches HTTP, damit andere im Netz oder auf diesem Gerät sie herunterladen können.",
"subtitle": "Aktualisieren Sie die enthaltenen Softwarepakete, fügen Sie eigene Dateien hinzu oder starten Sie eine Download-Seite für andere Geräte.",
- "back_tools": "Back to tools",
- "http_heading": "Plain HTTP mirror",
- "host_label": "Listen address",
+ "back_tools": "Zurück zu den Werkzeugen",
+ "http_heading": "Einfacher HTTP-Spiegel",
+ "host_label": "Lauschadresse",
"port_label": "Port",
- "start_http": "Start",
- "stop_http": "Stop",
- "restart_http": "Restart",
- "http_listen_label": "Listening:",
- "open_http": "Open in browser",
- "http_started": "HTTP server started",
- "http_stopped": "HTTP server stopped",
- "http_restarted": "HTTP server restarted",
- "http_err_generic": "HTTP server request failed",
- "http_err_invalid_host": "Invalid listen address",
- "http_err_invalid_port": "Invalid port",
- "http_err_already_running": "HTTP server is already running",
- "http_err_bind_failed": "Could not bind (port in use or permission denied)",
- "upload_heading": "Upload file",
- "choose_file": "Choose file",
- "refresh_bundled_tooltip": "Download bundled wheels to this device (needs network)",
- "refresh_started": "Downloading bundled packages…",
- "refresh_fetching": "Getting {pkg}…",
- "refresh_ok": "Bundled wheels refreshed",
- "refresh_ok_count": "{n} packages downloaded",
- "refresh_failed": "Could not refresh bundled wheels",
- "refresh_pip_missing": "pip was not found on this system. Install pip and try again.",
- "refresh_partial": "Some packages could not be downloaded (details below)",
- "refresh_partial_toast": "Bundled download finished with some failures",
- "files_heading": "Files",
+ "start_http": "Starten",
+ "stop_http": "Stoppen",
+ "restart_http": "Neustart",
+ "http_listen_label": "Lauscht:",
+ "open_http": "Im Browser öffnen",
+ "http_started": "HTTP-Server gestartet",
+ "http_stopped": "HTTP-Server gestoppt",
+ "http_restarted": "HTTP-Server neu gestartet",
+ "http_err_generic": "HTTP-Server-Anfrage fehlgeschlagen",
+ "http_err_invalid_host": "Ungültige Lauschadresse",
+ "http_err_invalid_port": "Ungültiger Port",
+ "http_err_already_running": "HTTP-Server läuft bereits",
+ "http_err_bind_failed": "Bindung fehlgeschlagen (Port belegt oder keine Berechtigung)",
+ "upload_heading": "Datei hochladen",
+ "choose_file": "Datei auswählen",
+ "refresh_bundled_tooltip": "Gebündelte Wheels auf dieses Gerät herunterladen (benötigt Netzwerk)",
+ "refresh_started": "Gebündelte Pakete werden heruntergeladen…",
+ "refresh_fetching": "Hole {pkg}…",
+ "refresh_ok": "Gebündelte Wheels aktualisiert",
+ "refresh_ok_count": "{n} Pakete heruntergeladen",
+ "refresh_failed": "Gebündelte Wheels konnten nicht aktualisiert werden",
+ "refresh_pip_missing": "pip wurde auf diesem System nicht gefunden. Installieren Sie pip und versuchen Sie es erneut.",
+ "refresh_partial": "Einige Pakete konnten nicht heruntergeladen werden (Details unten)",
+ "refresh_partial_toast": "Gebündelter Download mit einigen Fehlern abgeschlossen",
+ "files_heading": "Dateien",
"col_name": "Name",
- "col_source": "Source",
- "col_size": "Size",
- "empty": "No files yet. Upload a file or refresh bundled wheels.",
- "delete": "Delete",
- "delete_confirm": "Delete uploaded file \"{name}\"?",
- "delete_ok": "File removed",
- "delete_failed": "Could not delete file",
- "upload_ok": "File uploaded",
- "upload_failed": "Upload failed",
- "load_failed": "Could not load repository"
+ "col_source": "Quelle",
+ "col_size": "Größe",
+ "empty": "Noch keine Dateien. Laden Sie eine Datei hoch oder aktualisieren Sie die gebündelten Wheels.",
+ "delete": "Löschen",
+ "delete_confirm": "Hochgeladene Datei \"{name}\" löschen?",
+ "delete_ok": "Datei entfernt",
+ "delete_failed": "Datei konnte nicht gelöscht werden",
+ "upload_ok": "Datei hochgeladen",
+ "upload_failed": "Upload fehlgeschlagen",
+ "load_failed": "Repository konnte nicht geladen werden"
},
"rnode_flasher": {
- "title": "RNode Flasher",
+ "title": "RNode-Flasher",
"description": "RNode-Firmware im Browser flashen oder aktualisieren (unterstützte Hardware).",
"select_device": "1. Wählen Sie Ihr Gerät aus",
"product": "Produkt",
@@ -2148,8 +2148,8 @@
"connecting_device": "Verbindung zum Gerät wird hergestellt...",
"download_firmware": "Firmware herunterladen",
"official_firmware": "Offizielle Firmware",
- "ce_firmware": "CE Firmware",
- "transport_node_firmware": "Transport Node Firmware",
+ "ce_firmware": "CE-Firmware",
+ "transport_node_firmware": "Transportknoten-Firmware",
"common_issues": "Häufige Probleme",
"hardware_failure": "Hardwarefehler:",
"provision_eeprom_hint": "Sie müssen das EEPROM in Schritt 3 bereitstellen.",
@@ -2235,11 +2235,11 @@
"failed_start_pairing": "Fehler beim Starten der Kopplung: {error}",
"failed_set_rotation": "Fehler beim Einstellen der Display-Rotation: {error}",
"failed_start_reconditioning": "Fehler beim Starten der Display-Aufbereitung: {error}",
- "no_main_bin": "Could not locate the main firmware binary in the ZIP.",
- "invalid_host": "Please enter a valid host or IP address.",
- "bluetooth_flash_unsupported": "Bluetooth cannot be used to flash firmware. Use Serial or WiFi to flash, then return to Bluetooth for management.",
- "failed_diagnostics": "Failed to run diagnostics: {error}",
- "failed_detect_with_reason": "Failed to detect RNode: {error}"
+ "no_main_bin": "Die Haupt-Firmware-Binärdatei konnte im ZIP nicht gefunden werden.",
+ "invalid_host": "Bitte geben Sie einen gültigen Host oder eine gültige IP-Adresse ein.",
+ "bluetooth_flash_unsupported": "Bluetooth kann nicht zum Flashen von Firmware verwendet werden. Verwenden Sie seriell oder WLAN zum Flashen und kehren Sie dann für die Verwaltung zu Bluetooth zurück.",
+ "failed_diagnostics": "Fehler beim Ausführen der Diagnose: {error}",
+ "failed_detect_with_reason": "Fehler beim Erkennen von RNode: {error}"
},
"alerts": {
"firmware_downloaded": "Empfohlene Firmware wurde heruntergeladen und geladen.",
@@ -2260,70 +2260,70 @@
"bluetooth_pairing_started": "Kopplungsmodus gestartet (30s)",
"rotation_updated": "Rotation aktualisiert",
"reconditioning_started": "Aufbereitung gestartet",
- "diagnostics_healthy": "Diagnostics: device looks healthy.",
- "diagnostics_issues": "Diagnostics: {count} issue(s) detected."
+ "diagnostics_healthy": "Diagnose: Gerät sieht gesund aus.",
+ "diagnostics_issues": "Diagnose: {count} Problem(e) erkannt."
},
- "simple": "Simple",
- "advanced": "Advanced",
+ "simple": "Einfach",
+ "advanced": "Erweitert",
"original": "Original",
- "open_original_tab": "Open the original flasher in a new tab",
+ "open_original_tab": "Original-Flasher in neuem Tab öffnen",
"bluetooth": "Bluetooth",
- "preparing_firmware": "Preparing firmware...",
- "uploading": "Uploading: {percentage}%",
- "select_firmware_file": "Or select a firmware file (.zip)",
- "wifi_help": "The IP address of your RNode on the local network.",
- "run_diagnostics": "Diagnostics",
+ "preparing_firmware": "Firmware wird vorbereitet...",
+ "uploading": "Hochladen: {percentage}%",
+ "select_firmware_file": "Oder eine Firmware-Datei (.zip) auswählen",
+ "wifi_help": "Die IP-Adresse Ihres RNodes im lokalen Netzwerk.",
+ "run_diagnostics": "Diagnose",
"support": {
"serial": {
- "title": "USB serial is unavailable",
- "polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
+ "title": "USB-Serial ist nicht verfügbar",
+ "polyfill_not_loaded": "USB-Serial-Polyfill wurde noch nicht geladen.",
"android_webview_no_serial": "Android unterstützt Web Serial in dieser Ansicht nicht. Verwenden Sie einen Desktop-Browser oder den integrierten Flasher.",
- "browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
- "android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
- "unknown": "USB serial cannot be initialised in this environment."
+ "browser_unsupported": "Dieser Browser unterstützt Web Serial nicht. Versuchen Sie Chrome, Edge oder einen anderen Chromium-basierten Browser.",
+ "android_use_chrome": "Öffnen Sie diese Seite unter Android in Chrome, um Web Serial über WebUSB zu nutzen.",
+ "unknown": "USB-Serial kann in dieser Umgebung nicht initialisiert werden."
},
"bluetooth": {
- "title": "Bluetooth is unavailable",
+ "title": "Bluetooth ist nicht verfügbar",
"android_bridge_not_implemented": "Web Bluetooth ist hier nicht verfügbar. Verwenden Sie die Bluetooth-Einstellungen des Systems oder einen anderen Browser.",
- "browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
- "insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
- "requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
- "unknown": "Bluetooth cannot be initialised in this environment."
+ "browser_unsupported": "Dieser Browser unterstützt Web Bluetooth nicht. Versuchen Sie Chrome oder Edge.",
+ "insecure_context": "Web Bluetooth erfordert einen sicheren Kontext (HTTPS oder localhost).",
+ "requires_https": "Öffnen Sie den Flasher über HTTPS oder localhost, um Bluetooth zu aktivieren.",
+ "unknown": "Bluetooth kann in dieser Umgebung nicht initialisiert werden."
},
"actions": {
- "load_polyfill": "Load polyfill",
- "request_bluetooth": "Allow Bluetooth",
- "open_settings": "Open settings",
- "polyfill_loading": "Loading USB serial polyfill...",
- "bluetooth_requested": "Bluetooth permission requested."
+ "load_polyfill": "Polyfill laden",
+ "request_bluetooth": "Bluetooth erlauben",
+ "open_settings": "Einstellungen öffnen",
+ "polyfill_loading": "USB-Serial-Polyfill wird geladen...",
+ "bluetooth_requested": "Bluetooth-Berechtigung angefordert."
}
},
"diagnostics": {
- "title": "Device Diagnostics",
- "healthy": "Healthy",
- "needs_attention": "Needs attention",
- "issues_detected": "Issues detected",
+ "title": "Gerätediagnose",
+ "healthy": "Gesund",
+ "needs_attention": "Benötigt Aufmerksamkeit",
+ "issues_detected": "Probleme erkannt",
"firmware_version": "Firmware",
- "platform": "Platform",
- "board": "Board",
- "provisioned": "Provisioned",
- "product": "Product",
- "model": "Model",
- "firmware_hash": "FW hash",
- "target_hash": "Target hash",
+ "platform": "Plattform",
+ "board": "Platine",
+ "provisioned": "Bereitgestellt",
+ "product": "Produkt",
+ "model": "Modell",
+ "firmware_hash": "FW-Hash",
+ "target_hash": "Ziel-Hash",
"suggestions": {
- "not_provisioned": "EEPROM is not provisioned. Run step 3 (Provision EEPROM).",
- "firmware_hash_missing": "Firmware hash is missing. Run step 4 (Set Firmware Hash).",
- "firmware_hash_mismatch": "Firmware hash mismatch. Re-flash the firmware and re-run step 4.",
- "product_mismatch": "Selected product does not match the connected device.",
- "no_firmware_version": "Could not read firmware version. Try reconnecting the device.",
- "detect_failed": "Could not detect this RNode. Verify cable, port, and power.",
- "read_timeout": "Device did not respond in time. Try reconnecting or rebooting it."
+ "not_provisioned": "EEPROM ist nicht bereitgestellt. Führen Sie Schritt 3 (EEPROM bereitstellen) aus.",
+ "firmware_hash_missing": "Firmware-Hash fehlt. Führen Sie Schritt 4 (Firmware-Hash setzen) aus.",
+ "firmware_hash_mismatch": "Firmware-Hash stimmt nicht überein. Flashen Sie die Firmware erneut und führen Sie Schritt 4 erneut aus.",
+ "product_mismatch": "Ausgewähltes Produkt stimmt nicht mit dem angeschlossenen Gerät überein.",
+ "no_firmware_version": "Firmware-Version konnte nicht gelesen werden. Versuchen Sie, das Gerät erneut zu verbinden.",
+ "detect_failed": "Dieses RNode konnte nicht erkannt werden. Überprüfen Sie Kabel, Anschluss und Stromversorgung.",
+ "read_timeout": "Gerät hat nicht rechtzeitig geantwortet. Versuchen Sie, es erneut zu verbinden oder neu zu starten."
}
}
},
"micron_editor": {
- "title": "Micron Editor",
+ "title": "Micron-Editor",
"description": "Micron-Markup mit Live-Vorschau bearbeiten.",
"editor": "Editor",
"preview": "Vorschau",
@@ -2382,7 +2382,7 @@
"description": "LXMF-Papiernachrichten per QR erstellen oder einlesen."
},
"mesh_server": {
- "title": "Mesh Server",
+ "title": "Mesh-Server",
"description": "Micron-Seiten und Dateien für Peers im Mesh bereitstellen."
},
"rns_tunnel": {
@@ -2470,57 +2470,57 @@
"web_save_path_prompt": "Geben Sie den absoluten Ordnerpfad auf dem Rechner mit MeshChat (Server) ein, in dem die abgerufene Datei gespeichert werden soll:"
},
"rnsh": {
- "remote_shell": "Remote shell",
- "usage_title": "Usage",
- "usage_hint": "Create connect or listen sessions, then manage them on the Sessions tab. Output streams live while MeshChatX is running.",
- "tab_sessions": "Sessions",
- "tab_connect": "Connect",
- "tab_listen": "Listen",
- "sessions": "Sessions",
- "refresh": "Refresh",
- "name": "Session name",
- "name_placeholder": "Ops shell",
- "listen_mode": "Listen",
- "destination_hash": "Destination hash",
+ "remote_shell": "Remote-Shell",
+ "usage_title": "Verwendung",
+ "usage_hint": "Erstellen Sie Verbindungs- oder Lausch-Sitzungen und verwalten Sie diese auf dem Tab „Sitzungen“. Ausgabeströme bleiben aktiv, solange MeshChatX läuft.",
+ "tab_sessions": "Sitzungen",
+ "tab_connect": "Verbinden",
+ "tab_listen": "Lauschen",
+ "sessions": "Sitzungen",
+ "refresh": "Aktualisieren",
+ "name": "Sitzungsname",
+ "name_placeholder": "Ops-Shell",
+ "listen_mode": "Hören",
+ "destination_hash": "Ziel-Hash",
"destination_placeholder": "7a55144adf826958a9529a3bcf08b149",
- "allowed_hashes": "Allowed identity hashes",
- "allowed_hashes_placeholder": "One hash per line",
- "remote_command": "Remote command",
- "default_command": "Default command",
+ "allowed_hashes": "Zulässige Identitäts-Hashes",
+ "allowed_hashes_placeholder": "Ein Hash pro Zeile",
+ "remote_command": "Remote-Befehl",
+ "default_command": "Standardbefehl",
"command_placeholder": "/bin/bash --login",
- "mirror_exit_code": "Mirror exit code (-m)",
- "no_id": "No local identity (-N)",
- "create_and_start": "Create and start",
- "session_output": "Session output",
- "no_command_yet": "No command started yet",
- "start": "Start",
- "stop": "Stop",
- "clear": "Clear",
- "remove": "Remove",
- "send_line": "Send",
- "command_input_placeholder": "Type command input...",
- "status_running": "Running",
- "status_stopped": "Stopped",
- "status_failed": "Failed",
- "no_sessions": "No sessions created yet.",
- "unnamed_session": "Unnamed session",
- "select_or_create_session": "Select or create a session to begin.",
- "no_output_yet": "No output yet.",
- "destination_required": "Destination hash is required for connect mode.",
- "session_created": "Session created",
- "session_started": "Session started",
- "session_stopped": "Session stopped",
- "session_removed": "Session removed",
- "output_cleared": "Output cleared",
+ "mirror_exit_code": "Exit-Code spiegeln (-m)",
+ "no_id": "Keine lokale Identität (-N)",
+ "create_and_start": "Erstellen und starten",
+ "session_output": "Sitzungsausgabe",
+ "no_command_yet": "Noch kein Befehl gestartet",
+ "start": "Starten",
+ "stop": "Stoppen",
+ "clear": "Löschen",
+ "remove": "Entfernen",
+ "send_line": "Senden",
+ "command_input_placeholder": "Befehlseingabe eingeben...",
+ "status_running": "Läuft",
+ "status_stopped": "Gestoppt",
+ "status_failed": "Fehlgeschlagen",
+ "no_sessions": "Noch keine Sitzungen erstellt.",
+ "unnamed_session": "Unbenannte Sitzung",
+ "select_or_create_session": "Wählen oder erstellen Sie eine Sitzung, um zu beginnen.",
+ "no_output_yet": "Noch keine Ausgabe.",
+ "destination_required": "Ziel-Hash ist für den Verbindungsmodus erforderlich.",
+ "session_created": "Sitzung erstellt",
+ "session_started": "Sitzung gestartet",
+ "session_stopped": "Sitzung gestoppt",
+ "session_removed": "Sitzung entfernt",
+ "output_cleared": "Ausgabe gelöscht",
"title": "RNSH - Reticulum Remote Shell",
- "description": "Manage persistent rnsh sessions",
- "failed_to_load_sessions": "Failed to load RNSH sessions",
- "failed_to_create_session": "Failed to create RNSH session",
- "failed_to_start_session": "Failed to start RNSH session",
- "failed_to_stop_session": "Failed to stop RNSH session",
- "failed_to_remove_session": "Failed to remove RNSH session",
- "failed_to_clear_output": "Failed to clear RNSH output",
- "failed_to_send_input": "Failed to send RNSH input",
+ "description": "Persistente rnsh-Sitzungen verwalten",
+ "failed_to_load_sessions": "Fehler beim Laden der RNSH-Sitzungen",
+ "failed_to_create_session": "Fehler beim Erstellen der RNSH-Sitzung",
+ "failed_to_start_session": "Fehler beim Starten der RNSH-Sitzung",
+ "failed_to_stop_session": "Fehler beim Stoppen der RNSH-Sitzung",
+ "failed_to_remove_session": "Fehler beim Entfernen der RNSH-Sitzung",
+ "failed_to_clear_output": "Fehler beim Löschen der RNSH-Ausgabe",
+ "failed_to_send_input": "Fehler beim Senden der RNSH-Eingabe",
"listening_on": "Lauscht auf",
"waiting_for_address": "Warte auf Listener-Adresse...",
"copy_address": "Kopieren",
@@ -2529,13 +2529,13 @@
"config_dir": "Reticulum-Konfigurationsverzeichnis",
"config_dir_placeholder": "Standardmäßig die Reticulum-Konfiguration der App",
"config_dir_hint": "Leer lassen, um die Reticulum-Instanz von MeshChatX zu nutzen. Nur überschreiben, um ein separates Reticulum-Konfigurationsverzeichnis zu verwenden.",
- "tab_sessions_short": "Sessions",
- "tab_connect_short": "Connect",
- "tab_listen_short": "Listen",
- "fullscreen": "Full screen",
- "exit_fullscreen": "Exit full screen",
- "show_sessions": "Sessions",
- "hide_sessions": "Back to terminal"
+ "tab_sessions_short": "Sitzungen",
+ "tab_connect_short": "Verbinden",
+ "tab_listen_short": "Lauschen",
+ "fullscreen": "Vollbild",
+ "exit_fullscreen": "Vollbild beenden",
+ "show_sessions": "Sitzungen",
+ "hide_sessions": "Zurück zum Terminal"
},
"rnprobe": {
"network_diagnostics": "Netzwerkdiagnose",
@@ -2552,7 +2552,7 @@
"summary": "Zusammenfassung",
"sent": "Gesendet",
"delivered": "Zugestellt",
- "timeouts": "Timeouts",
+ "timeouts": "Zeitüberschreitungen",
"failed": "Fehlgeschlagen",
"probe_results": "Probe-Ergebnisse",
"probe_responses_realtime": "Probe-Antworten in Echtzeit",
@@ -2564,7 +2564,7 @@
"rssi": "RSSI",
"snr": "SNR",
"quality": "Qualität",
- "timeout": "Timeout",
+ "timeout": "Zeitüberschreitung",
"invalid_hash": "Ungültiger Ziel-Hash!",
"provide_full_name": "Bitte geben Sie einen vollständigen Zielnamen an!",
"failed_to_probe": "Probe des Ziels fehlgeschlagen"
@@ -2598,7 +2598,7 @@
"network": "Netzwerk",
"incoming_announces": "Eingehende Ankündigungen",
"outgoing_announces": "Ausgehende Ankündigungen",
- "airtime": "Airtime",
+ "airtime": "Sendezeit",
"channel_load": "Kanallast"
},
"translator": {
@@ -2639,9 +2639,9 @@
"refresh_languages": "Sprachen aktualisieren",
"copied_to_clipboard": "In die Zwischenablage kopiert",
"failed_load_languages": "Sprachen laden fehlgeschlagen. Stellen Sie sicher, dass LibreTranslate läuft oder Argos Translate installiert ist.",
- "failed_translate": "Translation failed. Make sure LibreTranslate is running or Argos Translate is installed.",
- "select_languages_warning": "Please select both source and target languages.",
- "auto_detect_not_supported": "Auto-detection is not supported with Argos Translate. Please select a source language."
+ "failed_translate": "Übersetzung fehlgeschlagen. Stellen Sie sicher, dass LibreTranslate läuft oder Argos Translate installiert ist.",
+ "select_languages_warning": "Bitte wählen Sie sowohl die Ausgangs- als auch die Zielsprache aus.",
+ "auto_detect_not_supported": "Die automatische Erkennung wird mit Argos Translate nicht unterstützt. Bitte wählen Sie eine Ausgangssprache aus."
},
"call": {
"phone": "Telefon",
@@ -2707,10 +2707,10 @@
"no_recordings": "Keine Aufnahmen gefunden",
"remote_rx": "Remote (RX)",
"local_tx": "Lokal (TX)",
- "download_rx": "Download RX",
- "download_tx": "Download TX",
- "minimize": "Minimize",
- "active": "Active",
+ "download_rx": "RX herunterladen",
+ "download_tx": "TX herunterladen",
+ "minimize": "Minimieren",
+ "active": "Aktiv",
"default_quality": "Standardqualität",
"active_call": "Aktiver Anruf",
"status": "Status",
@@ -2765,7 +2765,7 @@
"failed_to_update_ringtone_name": "Klingeltonname konnte nicht aktualisiert werden",
"failed_to_play_ringtone": "Klingelton konnte nicht abgespielt werden",
"failed_to_play_voicemail": "Sprachnachricht konnte nicht abgespielt werden",
- "web_audio_not_available": "Web audio not available",
+ "web_audio_not_available": "Web-Audio nicht verfügbar",
"no_audio_input_found": "Kein Eingabegerät für Audio gefunden. Überprüfen Sie Mikrofon und Berechtigungen.",
"microphone_permission_denied": "Mikrofonberechtigung verweigert. Erlauben Sie den Zugriff und versuchen Sie es erneut.",
"failed_to_update_dnd": "Nicht stören-Status aktualisieren fehlgeschlagen",
@@ -2788,14 +2788,14 @@
"failed_to_start_recording_greeting": "Begrüßungsaufnahme starten fehlgeschlagen",
"greeting_recorded_from_mic": "Begrüßung vom Mikrofon aufgenommen",
"failed_to_stop_recording_greeting": "Begrüßungsaufnahme stoppen fehlgeschlagen",
- "failed_to_load_recording": "Failed to load recording audio",
- "recording_deleted": "Recording deleted",
- "failed_to_delete_recording": "Failed to delete recording",
- "call_sent_to_voicemail": "Call sent to voicemail",
- "failed_to_send_to_voicemail": "Failed to send call to voicemail",
- "failed_load_audio_edit": "Failed to load audio for editing",
- "ringtone_saved": "Ringtone saved successfully",
- "failed_save_ringtone": "Failed to save edited ringtone"
+ "failed_to_load_recording": "Fehler beim Laden des Aufnahme-Audios",
+ "recording_deleted": "Aufnahme gelöscht",
+ "failed_to_delete_recording": "Fehler beim Löschen der Aufnahme",
+ "call_sent_to_voicemail": "Anruf an Voicemail gesendet",
+ "failed_to_send_to_voicemail": "Fehler beim Senden des Anrufs an Voicemail",
+ "failed_load_audio_edit": "Fehler beim Laden des Audios zur Bearbeitung",
+ "ringtone_saved": "Klingelton erfolgreich gespeichert",
+ "failed_save_ringtone": "Fehler beim Speichern des bearbeiteten Klingeltons"
},
"tutorial": {
"title": "Erste Schritte",
@@ -2932,10 +2932,10 @@
"bootstrap_added": "{count} Bootstrap-Schnittstelle(n) hinzugefügt",
"bootstrap_pick_at_least_one": "Wählen Sie mindestens einen Bootstrap-Knoten",
"failed_add_bootstrap": "Bootstrap-Schnittstelle konnte nicht hinzugefügt werden",
- "failed_add_bootstrap_none": "No bootstrap interfaces were added. Check your selection and try again.",
- "failed_save_bootstrap_only": "Failed to save bootstrap-only preference",
- "failed_enable_propagation": "Failed to enable auto-propagation",
- "connect_mode_required": "Choose a connection mode to continue",
+ "failed_add_bootstrap_none": "Es wurden keine Bootstrap-Schnittstellen hinzugefügt. Überprüfen Sie Ihre Auswahl und versuchen Sie es erneut.",
+ "failed_save_bootstrap_only": "Die Einstellung 'Nur Bootstrap' konnte nicht gespeichert werden",
+ "failed_enable_propagation": "Automatische Weiterleitung konnte nicht aktiviert werden",
+ "connect_mode_required": "Wählen Sie einen Verbindungsmodus, um fortzufahren",
"local_added": "Lokales AutoInterface hinzugefügt",
"failed_add_local": "Lokale Schnittstelle konnte nicht hinzugefügt werden",
"failed_reload_rns": "Reticulum konnte nicht neu gestartet werden",
@@ -2988,7 +2988,7 @@
"nav_forwarder_desc": "LXMF-Weiterleitungsregeln",
"nav_documentation": "Dokumentation",
"nav_documentation_desc": "Offline-Handbücher",
- "nav_repository_server": "Repository server",
+ "nav_repository_server": "Repository-Server",
"nav_repository_server_desc": "MeshChatX-Wheels, Reticulum-Pakete und Ihre Dateien über HTTP",
"nav_micron_editor": "Micron-Editor",
"nav_micron_editor_desc": "Micron-Markup bearbeiten",
@@ -3008,8 +3008,8 @@
"action_changelog_desc": "Letzte Änderungen"
},
"settings": {
- "shortcut_saved": "Shortcut saved",
- "shortcut_deleted": "Shortcut deleted",
+ "shortcut_saved": "Verknüpfung gespeichert",
+ "shortcut_deleted": "Verknüpfung gelöscht",
"archived_pages_flushed": "Archivierte Seiten geleert.",
"failed_enable_transport": "Transportmodus aktivieren fehlgeschlagen!",
"failed_disable_transport": "Transportmodus deaktivieren fehlgeschlagen!",
@@ -3055,25 +3055,25 @@
"micron_wasm_update_toast_uploaded": "WASM aus Ihrer Datei installiert.",
"micron_wasm_update_toast_reverted": "Gebündeltes Micron-WASM wiederhergestellt.",
"tabs": {
- "general": "General",
- "general_desc": "Language, appearance, and platform",
- "messages": "Messages",
- "messages_desc": "LXMF, stickers, and safety",
- "network": "Network",
- "network_desc": "Transport, interfaces, and discovery",
+ "general": "Allgemein",
+ "general_desc": "Sprache, Erscheinungsbild und Plattform",
+ "messages": "Nachrichten",
+ "messages_desc": "LXMF, Sticker und Sicherheit",
+ "network": "Netzwerk",
+ "network_desc": "Transport, Schnittstellen und Erkennung",
"nomad": "Nomad",
- "nomad_desc": "Archiver and page rendering",
- "privacy": "Privacy",
- "privacy_desc": "Data, access, and security",
- "maintenance": "Maintenance",
- "maintenance_desc": "Cleanup, export, and import",
+ "nomad_desc": "Archivierer und Seitenwiedergabe",
+ "privacy": "Datenschutz",
+ "privacy_desc": "Daten, Zugriff und Sicherheit",
+ "maintenance": "Wartung",
+ "maintenance_desc": "Bereinigung, Export und Import",
"plugins": "Plugins",
"plugins_desc": "MeshChatX-Plugins installieren und verwalten"
},
- "failed_update_reticulum_instance": "Failed to update Reticulum instance settings!"
+ "failed_update_reticulum_instance": "Fehler beim Aktualisieren der Reticulum-Instanzeinstellungen!"
},
"debug": {
- "title": "Debug Logs",
+ "title": "Debug-Protokolle",
"description": "Anwendungs- und Zugriffsprotokolle anzeigen, nach Schweregrad filtern und bei der Fehlersuche durchsuchen.",
"tab_logs": "Protokolle",
"tab_access_attempts": "Zugriffsversuche",
@@ -3094,52 +3094,52 @@
"failed_copy_access": "Zugriffsversuche konnten nicht kopiert werden"
},
"visualiser": {
- "title": "Network Visualiser",
+ "title": "Netzwerk-Visualisierer",
"description": "Graph aus entdeckten Knoten und Verbindungen.",
"reticulum_mesh": "Reticulum Mesh",
- "network_visualizer": "Network Visualizer",
- "node_info": "Node Info",
+ "network_visualizer": "Netzwerk-Visualizer",
+ "node_info": "Knoteninfo",
"hash": "Hash",
- "hops": "Hops",
- "interface": "Interface",
+ "hops": "Sprünge",
+ "interface": "Schnittstelle",
"rssi": "RSSI",
"snr": "SNR",
- "first_seen": "First seen",
- "last_seen": "Last seen",
- "center_node": "Center on node",
- "copy_hash": "Copy Hash",
- "banish_identity": "Banish identity",
- "banished_identities": "Banished identities",
- "filter_nodes": "Filter nodes...",
- "all": "All",
- "direct": "Direct",
- "one_hop": "1 Hop",
- "multi_hops": "2+ Hops",
- "clear": "Clear",
- "show_labels": "Show all labels",
- "show_edges": "Show edges",
- "show_tooltips": "Show tooltips",
- "show_rssi": "Show RSSI",
- "show_snr": "Show SNR",
- "show_hops": "Show Hops",
- "physics": "Physics",
- "gravity": "Gravity",
- "spring_length": "Spring length",
- "spring_strength": "Spring strength",
- "damping": "Damping",
- "central_gravity": "Central gravity",
- "edge_strength": "Edge strength",
+ "first_seen": "Erstmals gesehen",
+ "last_seen": "Zuletzt gesehen",
+ "center_node": "Auf Knoten zentrieren",
+ "copy_hash": "Hash kopieren",
+ "banish_identity": "Identität verbannen",
+ "banished_identities": "Verbannte Identitäten",
+ "filter_nodes": "Knoten filtern...",
+ "all": "Alle",
+ "direct": "Direkt",
+ "one_hop": "1 Sprung",
+ "multi_hops": "2+ Sprünge",
+ "clear": "Löschen",
+ "show_labels": "Alle Beschriftungen anzeigen",
+ "show_edges": "Kanten anzeigen",
+ "show_tooltips": "Tooltips anzeigen",
+ "show_rssi": "RSSI anzeigen",
+ "show_snr": "SNR anzeigen",
+ "show_hops": "Hops anzeigen",
+ "physics": "Physik",
+ "gravity": "Schwerkraft",
+ "spring_length": "Federlänge",
+ "spring_strength": "Federstärke",
+ "damping": "Dämpfung",
+ "central_gravity": "Zentrale Schwerkraft",
+ "edge_strength": "Kantenstärke",
"force_atlas_2": "Force Atlas 2",
"barns_hut": "Barns Hut",
- "repulsion": "Repulsion",
- "reset_physics": "Reset physics",
- "reset_camera": "Reset Camera",
- "clear_graph": "Clear graph",
- "total_nodes": "Total nodes",
- "total_edges": "Total edges",
- "discovered": "Discovered",
- "wait_between_batches": "Wait between batches",
- "batch": "Batch",
+ "repulsion": "Abstoßung",
+ "reset_physics": "Physik zurücksetzen",
+ "reset_camera": "Kamera zurücksetzen",
+ "clear_graph": "Graphen löschen",
+ "total_nodes": "Knoten insgesamt",
+ "total_edges": "Kanten insgesamt",
+ "discovered": "Entdeckt",
+ "wait_between_batches": "Wartezeit zwischen Batches",
+ "batch": "Stapel",
"loading_status": "Status laden",
"failed_load": "Netzwerkdaten laden fehlgeschlagen",
"max_hops_filter": "Max. Hops",
@@ -3147,32 +3147,32 @@
"show_discovered_interfaces": "Entdeckte Interfaces anzeigen"
},
"banishment": {
- "title": "Banished",
+ "title": "Verbannt",
"description": "Sperren für Identitäten und Knoten prüfen und aufheben.",
- "failed_load_banished": "Failed to load banished destinations",
- "search_placeholder": "Search by hash or display name...",
- "loading_items": "Loading banished items...",
- "no_items": "No banished items found",
- "lift_banishment": "Lift Banishment",
- "lift_banishment_confirm": "Are you sure you want to lift the banishment for {name}?",
- "banished_at": "Banished at",
- "banished_until": "Banished until",
- "reason": "Reason",
- "type": "Type",
- "user": "User",
- "node": "Node",
+ "failed_load_banished": "Laden der verbannten Ziele fehlgeschlagen",
+ "search_placeholder": "Nach Hash oder Anzeigename suchen...",
+ "loading_items": "Verbannte Elemente werden geladen...",
+ "no_items": "Keine verbannten Elemente gefunden",
+ "lift_banishment": "Verbannung aufheben",
+ "lift_banishment_confirm": "Möchten Sie die Verbannung für {name} wirklich aufheben?",
+ "banished_at": "Verbannt am",
+ "banished_until": "Verbannt bis",
+ "reason": "Grund",
+ "type": "Typ",
+ "user": "Benutzer",
+ "node": "Knoten",
"blocked_destinations": "Blockierte Ziele",
- "banishment_lifted": "Banishment lifted successfully",
- "failed_lift_banishment": "Failed to lift banishment",
- "lift_selected": "Lift banishment ({count})",
- "lift_selected_confirm": "Lift banishment for {count} selected items?",
- "lift_selected_success": "Lifted banishment for {count} items",
- "filter_all_types": "All types",
- "filter_rns": "RNS blackhole",
- "sort_newest": "Newest first",
- "sort_oldest": "Oldest first",
+ "banishment_lifted": "Verbannung erfolgreich aufgehoben",
+ "failed_lift_banishment": "Aufhebung der Verbannung fehlgeschlagen",
+ "lift_selected": "Verbannung aufheben ({count})",
+ "lift_selected_confirm": "Verbannung für {count} ausgewählte Elemente aufheben?",
+ "lift_selected_success": "Verbannung für {count} Elemente aufgehoben",
+ "filter_all_types": "Alle Typen",
+ "filter_rns": "RNS-Schwarzes-Loch",
+ "sort_newest": "Neueste zuerst",
+ "sort_oldest": "Älteste zuerst",
"sort_name": "Name A-Z",
- "result_count": "{count} items"
+ "result_count": "{count} Elemente"
},
"relay_chat": {
"title": "Relais-Chat",
@@ -3356,20 +3356,20 @@
"presence_connection": "{count} Verbindungsereignisse"
},
"android_storage": {
- "setup_title": "Choose where MeshChatX stores data",
- "setup_desc": "File-manager storage is recommended. You can browse and back up your identity and messages under Android/data/com.meshchatx/files/. The app restarts when you change this during setup.",
- "setup_external_title": "File-manager storage (recommended)",
- "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — visible in many file managers.",
- "setup_internal_title": "Private app storage",
- "setup_internal_desc": "Hidden from file managers; only this app can access it.",
- "setup_continue": "Continue",
- "upgrade_title": "Move data to file-manager storage?",
- "upgrade_desc": "Your MeshChatX data is in private app storage. Copy it to the file-manager folder so you can browse and back up files, then restart the app.",
- "upgrade_copy": "Copy and restart",
- "upgrade_stay_internal": "Stay on private storage",
- "working": "Preparing…",
- "copy_restart_hint": "Copy scheduled. Closing the app — open MeshChatX again to finish.",
- "restart_to_apply": "Restart the app to apply your storage choice.",
- "failed": "Could not update storage location."
+ "setup_title": "Wählen Sie, wo MeshChatX Daten speichert",
+ "setup_desc": "Dateimanager-Speicher wird empfohlen. Sie können Ihre Identität und Nachrichten unter Android/data/com.meshchatx/files/ durchsuchen und sichern. Die App wird neu gestartet, wenn Sie dies während der Einrichtung ändern.",
+ "setup_external_title": "Dateimanager-Speicher (empfohlen)",
+ "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx – in vielen Dateimanagern sichtbar.",
+ "setup_internal_title": "Privater App-Speicher",
+ "setup_internal_desc": "Für Dateimanager verborgen; nur diese App kann darauf zugreifen.",
+ "setup_continue": "Weiter",
+ "upgrade_title": "Daten in den Dateimanager-Speicher verschieben?",
+ "upgrade_desc": "Ihre MeshChatX-Daten befinden sich im privaten App-Speicher. Kopieren Sie sie in den Dateimanager-Ordner, damit Sie Dateien durchsuchen und sichern können, und starten Sie dann die App neu.",
+ "upgrade_copy": "Kopieren und neu starten",
+ "upgrade_stay_internal": "Im privaten Speicher bleiben",
+ "working": "Vorbereitung…",
+ "copy_restart_hint": "Kopieren geplant. Schließen Sie die App – öffnen Sie MeshChatX erneut, um den Vorgang abzuschließen.",
+ "restart_to_apply": "Starten Sie die App neu, um Ihre Speicherwahl zu übernehmen.",
+ "failed": "Speicherort konnte nicht aktualisiert werden."
}
}

diff --git a/meshchatx/src/frontend/locales/es.json b/meshchatx/src/frontend/locales/es.json
index 0d57a7b8..971cf95f 100644
--- a/meshchatx/src/frontend/locales/es.json
+++ b/meshchatx/src/frontend/locales/es.json
@@ -1,9 +1,9 @@
{
"_languageName": "Español",
"bots": {
- "title": "LXMFy Bots",
+ "title": "Bots LXMFy",
"description": "Simples bots LXMF (echo, notas, recordatorios) cuando se instala LXMFy.",
- "bot_framework": "Bot Framework",
+ "bot_framework": "Marco de bots",
"lxmfy_not_detected": "LXMFy no detectado",
"lxmfy_not_detected_desc": "Para usar bots, debe instalar el paquete LXMFy:",
"install_via_pip": "Instalar mediante pip",
@@ -30,7 +30,7 @@
"bot_deleted": "Bot eliminado con éxito",
"failed_to_delete": "Error al eliminar bot",
"more_bots_coming": "¡Más bots pronto!",
- "chat_with_bot": "Chat",
+ "chat_with_bot": "Chatear",
"lxmf_address": "Dirección LXMF",
"last_announce": "Último anuncio",
"never_announced": "Aún no visto en este nodo",
@@ -227,10 +227,10 @@
"incoming_message_size_custom": "Aduanas",
"incoming_message_size_unit_mb": "MB",
"incoming_message_size_unit_gb": "GB",
- "auto_sync_interval": "Auto Sync Interval",
+ "auto_sync_interval": "Intervalo de sincronización automática",
"last_synced": "Última sincronización hace {time}.",
"last_synced_never": "Última sincronización: nunca.",
- "propagation_stamp_cost": "Propagation Node Stamp Cost",
+ "propagation_stamp_cost": "Costo de sello del nodo de propagación",
"propagation_stamp_description": "Requiere sellos proof-of-work para los mensajes enviados a través de su nodo. Los valores más altos requieren más trabajo. Rango: 13-254. Predeterminado: 16. **Nota:** Cambiar esto requiere un reinicio.",
"language": "Idioma",
"select_language": "Seleccione su idioma preferido.",
@@ -238,23 +238,23 @@
"open": "Abierto",
"identity": "Identidad",
"lxmf_address_hash": "LXMF Dirección Hash",
- "propagation_node_status": "Propagation Node Status",
+ "propagation_node_status": "Estado del nodo de propagación",
"last_sync": "Último sync: hace {time}",
"last_sync_never": "Último Sync: nunca",
"syncing": "Sincronización...",
"synced": "Sin embargo",
"not_synced": "No sincronizado",
"not_configured": "No configurado",
- "toggle_source": "Toggle Source Code",
+ "toggle_source": "Alternar código fuente",
"audio_calls": "Teléfono",
"calls": "Llamadas",
"status": "Situación",
"active_call": "Llamada activa",
"incoming": "Entrando",
"outgoing": "Saliendo",
- "call": "Call",
+ "call": "Llamada",
"calls_plural": "Llamadas",
- "hop": "hop",
+ "hop": "salto",
"hops_plural": "Hops",
"hung_up_waiting": "Hung, esperando la llamada...",
"view_incoming_calls": "Ver llamadas entrantes",
@@ -264,9 +264,9 @@
"incoming_call": "Llamada entrante...",
"outgoing_call": "Llamada saliente...",
"call_active": "Activo",
- "call_ended": "Ended",
- "propagation_node": "Propagation Node",
- "sync_now": "Sync Now",
+ "call_ended": "Finalizada",
+ "propagation_node": "Nodo de propagación",
+ "sync_now": "Sincronizar ahora",
"setting_auto_saved": "Ajuste{label}auto-salvado",
"backup_max_count": "Limite de respaldo automático",
"message_font_size": "Tamaño de la fuente",
@@ -279,24 +279,24 @@
"message_timestamp_grouping_description": "Cuando está activado, los mensajes se agrupan por fecha y las marcas de tiempo se simplifican. Cuando está desactivado, cada mensaje muestra su hora exacta.",
"search_settings": "Ajustes de búsqueda...",
"auto_resend": "Reembolso automático",
- "retry_attachments": "Retry Attachments",
- "auto_fallback": "Auto Fallback",
+ "retry_attachments": "Reintentar adjuntos",
+ "auto_fallback": "Retroceso automático",
"community_interfaces": "Interfaces comunitarias",
"preferred_node": "Nodo preferente",
"local_node": "Nodo local",
- "auto_sync": "Auto Sync",
- "inbound_stamp_cost_label": "Inbound Stamp Cost",
- "propagation_stamp_cost_label": "Propagation Stamp Cost",
- "page_archiver": "Page Archiver",
- "smart_crawler": "Smart Crawler",
+ "auto_sync": "Sincronización automática",
+ "inbound_stamp_cost_label": "Costo del sello entrante",
+ "propagation_stamp_cost_label": "Costo de sello de propagación",
+ "page_archiver": "Archivador de páginas",
+ "smart_crawler": "Rastreador inteligente",
"authentication": "Autenticación",
- "stranger_protection": "Stranger Protection",
+ "stranger_protection": "Protección contra desconocidos",
"stranger_protection_description": "Controla cómo la aplicación maneja mensajes y archivos adjuntos de pares desconocidos.",
"block_stranger_attachments": "Atajos de bloque de Extranjeros",
"block_stranger_attachments_description": "Elimina automáticamente los archivos adjuntos, imágenes y audio de personas que no están en tus contactos. Los mensajes de texto se siguen entregando.",
"block_all_from_strangers": "Bloquear todo de los extraños",
"block_all_from_strangers_description": "Ignora todos los mensajes, archivos adjuntos y llamadas de personas que no están en tus contactos. No se entrega ni se guarda nada.",
- "show_unknown_contact_banner": "Show Unknown Contact Banner",
+ "show_unknown_contact_banner": "Mostrar banner de contacto desconocido",
"show_unknown_contact_banner_description": "Cuando está habilitado, aparece un aviso en la parte superior de las conversaciones con compañeros que no están en sus contactos.",
"warn_on_stranger_links": "Advertido antes de abrir Enlaces extraños",
"warn_on_stranger_links_description": "Mostrar un aviso antes de abrir enlaces HTTP/HTTPS enviados por pares que no están en sus contactos.",
@@ -313,17 +313,17 @@
"desktop_hardware_acceleration_enabled": "Aceleración de hardware",
"desktop_hardware_acceleration_enabled_description": "Desactivar esto si experimentas ondulaciones UI, pantallas negras o fallos gráficos.",
"translator": "Traductor",
- "translator_enabled": "Enable Translator",
+ "translator_enabled": "Habilitar traductor",
"translator_description": "Activar funciones de traducción en conversaciones.",
"libretranslate_url": "URL de LibreTranslate",
"libretranslate_url_description": "La URL donde LibreTranslate API es accesible.",
"system": "Sistema",
- "reticulum_stack": "Reticulum Stack",
+ "reticulum_stack": "Pila de Reticulum",
"reticulum_stack_description": "Gestione la red Reticulum subyacente Stack.",
- "reload_rns": "Reload RNS",
+ "reload_rns": "Recargar RNS",
"reload_rns_description": "Desregistre todos los destinos, detenga la instancia RNS actual y vuelva a cargarla. Esto es útil para aplicar cambios de configuración o reiniciar la red de malla sin reiniciar toda la aplicación.",
"reloading_rns": "Recargar RNS...",
- "reloaded_rns": "Reticulum reloaded successfully",
+ "reloaded_rns": "Reticulum recargado exitosamente",
"announce_interval": "Anuncio Interval",
"stop_sync_confirm": "¿Seguro que quieres dejar de sincronizar?",
"sync_error_generic": "Algo salió mal. Inténtalo de nuevo más tarde.",
@@ -331,7 +331,7 @@
"sync_error": "Error de sincronización:{status}",
"propagation_sync_live": "Sincronización:{status}({progress}%)",
"propagation_sync_state": {
- "idle": "Idle",
+ "idle": "Inactivo",
"path_requested": "Solicitud de ruta",
"link_establishing": "Establecer vínculos",
"link_established": "Enlace establecido",
@@ -342,10 +342,10 @@
"no_path": "No hay camino al nodo",
"link_failed": "Link falló",
"transfer_failed": "Falló la transferencia",
- "no_identity_received": "No identity received",
+ "no_identity_received": "No se recibió identidad",
"no_access": "Acceso denegado",
- "failed": "Failed",
- "path_timeout": "Path timed out",
+ "failed": "Falló",
+ "path_timeout": "Ruta agotada",
"unknown": "Estado desconocido"
},
"switching_identity": "Cambiar la identidad...",
@@ -356,7 +356,7 @@
"emergency_mode_active": "Modo de Emergencia Activo - Utilizar bases de datos en memoria y servicios restringidos.",
"backend_disconnected": "Desconectado desde el backend",
"backend_process_stopped": "Backend de Reticulum detenido",
- "backend_reconnected": "Reconnected to backend",
+ "backend_reconnected": "Reconectado al backend",
"restart_backend": "Reiniciar backend",
"restart_backend_started": "Reiniciando backend…",
"restart_backend_failed": "No se pudo reiniciar el backend",
@@ -380,8 +380,8 @@
"discovered_interfaces_max_return_hint": "Las entradas de interfaz máximas descubiertas y activas volvieron a la interfaz de usuario.",
"announce_limit_lxmf": "LXMF",
"announce_limit_nomadnet": "NomadNet",
- "announce_limit_prop": "Prop Nodes",
- "csp_settings": "Content Security Policy (CSP)",
+ "announce_limit_prop": "Nodos Prop",
+ "csp_settings": "Política de Seguridad de Contenido (CSP)",
"csp_description": "Agregue manualmente dominios y fuentes permitidos para diversos tipos de recursos. Esto es útil para servidores personalizados, bots o integraciones externas.",
"csp_extra_connect_src": "Fuentes de conexión extra",
"csp_extra_connect_src_description": "Fuentes adicionales para las conexiones entre el fetch/websocket (por ejemplo: https://api.example.com).",
@@ -408,50 +408,50 @@
"telemetry_description": "Permitir que MeshChatX envíe y reciba datos de telemetría. Esto incluye responder a las solicitudes de ubicación de los pares de confianza.",
"telemetry_trusted_peers": "Fideicomisos de telemetría",
"telemetry_no_trusted_peers": "No se configuran pares de confianza. Confíe en los pares del menú de chat para que puedan solicitar su ubicación.",
- "telemetry_revoke_trust": "Revoke Trust",
+ "telemetry_revoke_trust": "Revocar confianza",
"telemetry_trust_revoked": "Confianza de telemetría revocada para{name}",
"telemetry_trust_granted_alert": "Peer es ahora confiado para la telemetría.",
"telemetry_trust_revoked_alert": "La confianza en la telemetría revocó.",
"telemetry_trust_failed": "Sin actualizar la confianza en la telemetría.",
- "telemetry_trust_revoke": "Revoke Telemetry Trust",
- "telemetry_trust_grant": "Trust for Telemetry",
+ "telemetry_trust_revoke": "Revocar confianza de telemetría",
+ "telemetry_trust_grant": "Confianza para telemetría",
"location_manage_desc": "Administrar cómo se comparte su ubicación.",
"restart_rns": "Reiniciar RNS",
- "flood_protection": "Flood Protection",
- "flood_protection_description": "Automatically raise the inbound stamp cost when receiving too many messages per minute from many sources. This makes coordinated spam attacks computationally expensive while keeping normal conversations affordable.",
- "flood_protection_enabled": "Enable auto-adjusting stamp cost",
- "flood_threshold": "Messages per minute threshold",
- "flood_max_stamp_cost": "Maximum stamp cost during flood",
- "flood_cooldown": "Cooldown before lowering cost (seconds)",
+ "flood_protection": "Protección contra inundaciones",
+ "flood_protection_description": "Aumenta automáticamente el costo del sello entrante cuando se reciben demasiados mensajes por minuto desde muchas fuentes. Esto hace que los ataques de spam coordinados sean computacionalmente costosos mientras mantiene las conversaciones normales asequibles.",
+ "flood_protection_enabled": "Habilitar ajuste automático del costo del sello",
+ "flood_threshold": "Umbral de mensajes por minuto",
+ "flood_max_stamp_cost": "Costo máximo de sello durante inundación",
+ "flood_cooldown": "Tiempo de espera antes de reducir el costo (segundos)",
"relay_chat": "Chat de retransmision",
- "desktop_tray_enabled": "System tray integration",
- "desktop_tray_enabled_description": "Keep a tray icon so MeshChatX can hide to the background instead of quitting.",
- "desktop_close_behavior": "When closing the window",
- "desktop_close_behavior_description": "Choose whether closing the window quits, hides to the tray/taskbar, or asks each time.",
- "desktop_close_behavior_ask": "Ask every time",
- "desktop_close_behavior_quit": "Quit application",
- "desktop_close_behavior_background": "Keep running in background",
- "desktop_close_behavior_background_no_tray": "Minimize to taskbar",
- "share_reticulum_instance": "Share Reticulum Instance",
- "share_reticulum_instance_description": "Make this MeshChatX Reticulum instance available to other local programs (Sideband-style shared instance). Other apps can use connectivity without Transport enabled.",
- "obfuscate_hops": "Obfuscate Hops",
- "obfuscate_hops_description": "When enabled, Reticulum applies a random local hop delta (RNS local_hops_delta) so outbound traffic does not advertise a true zero-hop origin to the wider mesh.",
- "respond_to_probes": "Respond to Probes",
- "respond_to_probes_description": "Allow this instance to answer Reticulum probe requests from the network.",
- "enable_remote_management": "Enable Remote Management",
- "enable_remote_management_description": "Allow remote management of this Reticulum instance when configured in the RNS config.",
- "shared_instance_type": "Shared Instance Type",
- "shared_instance_type_default": "Platform default",
- "shared_instance_type_description": "Use TCP when domain sockets are unavailable (common on Android). Leave default otherwise.",
- "instance_name": "Instance Name",
- "instance_name_description": "Isolate multiple shared instances on one system. Default is usually fine.",
- "rpc_config": "RPC Access",
- "rpc_config_description": "Copy these lines into another program's [reticulum] section for full shared-instance RPC access (management, interface status, path info).",
- "rpc_config_unavailable": "RPC key is not available yet. Start Reticulum as a shared instance first.",
- "rpc_config_copied": "RPC config copied to clipboard",
- "copy_rpc_config": "Copy RPC Config",
- "connected_to_shared_instance": "This MeshChatX process is attached to an external shared Reticulum instance. Edit that instance's config to change share/RPC settings.",
- "copy_failed": "Failed to copy to clipboard",
+ "desktop_tray_enabled": "Integración con la bandeja del sistema",
+ "desktop_tray_enabled_description": "Mantener un icono en la bandeja para que MeshChatX pueda ocultarse en segundo plano en lugar de salir.",
+ "desktop_close_behavior": "Al cerrar la ventana",
+ "desktop_close_behavior_description": "Elija si cerrar la ventana sale, se oculta en la bandeja/barra de tareas o pregunta cada vez.",
+ "desktop_close_behavior_ask": "Preguntar cada vez",
+ "desktop_close_behavior_quit": "Salir de la aplicación",
+ "desktop_close_behavior_background": "Mantener ejecutándose en segundo plano",
+ "desktop_close_behavior_background_no_tray": "Minimizar a la barra de tareas",
+ "share_reticulum_instance": "Compartir instancia de Reticulum",
+ "share_reticulum_instance_description": "Haz que esta instancia de Reticulum de MeshChatX esté disponible para otros programas locales (instancia compartida estilo Sideband). Otras aplicaciones pueden usar la conectividad sin Transport habilitado.",
+ "obfuscate_hops": "Ofuscar saltos",
+ "obfuscate_hops_description": "Cuando está habilitado, Reticulum aplica un delta de saltos local aleatorio (RNS local_hops_delta) para que el tráfico saliente no anuncie un origen de cero saltos real a la malla más amplia.",
+ "respond_to_probes": "Responder a sondas",
+ "respond_to_probes_description": "Permitir que esta instancia responda a solicitudes de sonda de Reticulum desde la red.",
+ "enable_remote_management": "Habilitar gestión remota",
+ "enable_remote_management_description": "Permitir la gestión remota de esta instancia de Reticulum cuando esté configurada en la configuración de RNS.",
+ "shared_instance_type": "Tipo de instancia compartida",
+ "shared_instance_type_default": "Predeterminado de la plataforma",
+ "shared_instance_type_description": "Usa TCP cuando los sockets de dominio no estén disponibles (común en Android). Deja el valor predeterminado en otros casos.",
+ "instance_name": "Nombre de la instancia",
+ "instance_name_description": "Aislar múltiples instancias compartidas en un sistema. El valor predeterminado suele ser suficiente.",
+ "rpc_config": "Acceso RPC",
+ "rpc_config_description": "Copia estas líneas en la sección [reticulum] de otro programa para acceso RPC completo de instancia compartida (gestión, estado de interfaces, información de rutas).",
+ "rpc_config_unavailable": "La clave RPC aún no está disponible. Inicia Reticulum como una instancia compartida primero.",
+ "rpc_config_copied": "Configuración RPC copiada al portapapeles",
+ "copy_rpc_config": "Copiar configuración RPC",
+ "connected_to_shared_instance": "Este proceso de MeshChatX está conectado a una instancia externa compartida de Reticulum. Edite la configuración de esa instancia para cambiar los ajustes de compartir/RPC.",
+ "copy_failed": "Error al copiar al portapapeles",
"rpc_key_hidden": "Oculta — toca para mostrar",
"rpc_key_show": "Mostrar clave RPC",
"rpc_key_hide": "Ocultar clave RPC",
@@ -468,10 +468,10 @@
"delete": "Suprimir",
"edit": "Editar",
"add": "Añadir",
- "sync": "Sync",
+ "sync": "Sincronizar",
"restart_app": "App de reinicio",
- "reveal": "Reveal",
- "refresh": "Refresh",
+ "reveal": "Revelar",
+ "refresh": "Actualizar",
"copy": "Copiado",
"copy_to_clipboard": "Copiado para el portapapeles",
"vacuum": "Vacuo",
@@ -486,14 +486,14 @@
"error": "Error",
"success": "Éxito",
"warning": "Advertencia",
- "info": "Info",
+ "info": "Información",
"copied": "Copiado para el portapapeles",
- "failed_to_copy": "Failed to copy to clipboard",
+ "failed_to_copy": "No se pudo copiar al portapapeles",
"save_failed": "¡Failado para guardar la configuración!",
"invalid_address": "Dirección inválida",
"loading": "Cargando...",
- "ok": "OK",
- "clear": "Clear"
+ "ok": "Aceptar",
+ "clear": "Limpiar"
},
"stickers": {
"settings_title": "Pegatinas",
@@ -518,7 +518,7 @@
"duplicate": "Ya en tu biblioteca",
"save_failed": "No podía salvar pegatina",
"import_success": "{imported}importado, duplicados{skipped_duplicates}saltados, inválido{skipped_invalid}",
- "import_failed": "Failed to import stickers",
+ "import_failed": "Error al importar stickers",
"all_stickers": "Todas las pegatinas",
"unpacked": "Desempaquetado",
"open_editor": "Editor de sticker abierto",
@@ -526,7 +526,7 @@
"format_static": "Estática",
"format_animated": "Animados",
"format_video": "Video",
- "format_legacy": "Legacy",
+ "format_legacy": "Legado",
"errors": {
"file_too_large_static": "Las pegatinas estaticas deben ser 512 KB o más pequeñas.",
"file_too_large_animated": "Las pegatinas TGS animadas deben ser de 64 KB o más pequeñas.",
@@ -574,11 +574,11 @@
"no_stickers": "Aún no hay pegatinas en este paquete."
},
"editor": {
- "title": "Sticker editor",
+ "title": "Editor de stickers",
"open": "Editor abierto",
"select_image": "Seleccione la imagen",
"drop_image": "Suelte una imagen, o haga clic en",
- "reset": "Reset",
+ "reset": "Restablecer",
"remove_background": "Eliminar el fondo",
"removing_background": "Eliminación de antecedentes...",
"white_stroke": "Blanco golpe",
@@ -586,8 +586,8 @@
"stroke_size": "Tamaño de Stroke",
"scale": "Escala",
"rotate": "Rotación",
- "offset_x": "Offset X",
- "offset_y": "Offset Y",
+ "offset_x": "Desplazamiento X",
+ "offset_y": "Desplazamiento Y",
"text_overlay": "Superposición de texto",
"text_placeholder": "Añadir texto...",
"text_color": "Color de texto",
@@ -598,7 +598,7 @@
"quality": "Calidad",
"emoji": "Emoji",
"emoji_placeholder": "Facultativo",
- "pack": "Pack",
+ "pack": "Paquete",
"no_pack": "No hay paquete",
"save": "Guardar pegatina",
"saved": "Pegatina salvada",
@@ -608,7 +608,7 @@
}
},
"sticker_editor": {
- "title": "Sticker editor",
+ "title": "Editor de stickers",
"create_button": "Crear pegatina",
"processing": "Procesando...",
"canvas_hint": "La vista previa está escalada. La exportación utiliza un lienzo de 512×512.",
@@ -617,8 +617,8 @@
"section_transform": "Transformación",
"scale": "Escala",
"rotation": "Rotación",
- "flip_h": "Flip horizontal",
- "flip_v": "Flip vertical",
+ "flip_h": "Voltear horizontalmente",
+ "flip_v": "Voltear verticalmente",
"reset_transform": "Reiniciar la transformación",
"section_effects": "Efectos",
"bg_removed": "Antecedentes eliminados",
@@ -682,9 +682,9 @@
"gifs": {
"settings_title": "GIFs",
"settings_description": "Su biblioteca GIF personal para esta identidad. Subir GIF y animar archivos WebP, y luego reutilizarlos rápidamente a través de chats. Los GIF más usados se muestran primero.",
- "export": "Export GIFs",
+ "export": "Exportar GIFs",
"import": "Importar GIFs",
- "export_done": "GIFs exported",
+ "export_done": "GIFs exportados",
"replace_duplicates": "Sustitúyase GIF duplicados al importar",
"count": "{count}salvó GIF(s)",
"tab_gifs": "GIFs",
@@ -704,21 +704,21 @@
"plugins": {
"settings": {
"title": "Plugins",
- "description": "Install, enable, and review permissions for MeshChatX plugins. ZIP and WASM installs show a confirmation dialog with permissions, signature status, and security findings.",
+ "description": "Instale, habilite y revise permisos para complementos de MeshChatX. Las instalaciones ZIP y WASM muestran un diálogo de confirmación con permisos, estado de firma y hallazgos de seguridad.",
"enable": "Habilitar",
"disable": "Deshabilitar",
"remove": "Eliminar",
"permissions": "Permisos",
- "install_zip": "Install plugin from ZIP or WASM bundle",
+ "install_zip": "Instalar plugin desde ZIP o paquete WASM",
"enabled": "Plugin habilitado",
"disabled": "Plugin deshabilitado",
"removed": "Plugin eliminado",
"installed": "Plugin instalado",
"auto_disabled": "Plugin deshabilitado automáticamente: {reason}",
"kill_switch": "Se deshabilitó un plugin: {reason}",
- "empty_state": "No plugins installed yet. Upload a plugin ZIP or WASM bundle to get started.",
- "drag_drop": "Drag and drop a plugin ZIP or WASM bundle here",
- "choose_file": "Choose ZIP or WASM file",
+ "empty_state": "Aún no hay plugins instalados. Sube un ZIP de plugin o un paquete WASM para empezar.",
+ "drag_drop": "Arrastra y suelta aquí un ZIP de plugin o un paquete WASM",
+ "choose_file": "Elegir archivo ZIP o WASM",
"confirm_remove": "¿Eliminar el plugin \"{name}\"? Se borrarán sus archivos y datos.",
"badge_enabled": "Activo",
"badge_disabled": "Inactivo",
@@ -726,97 +726,97 @@
"badge_wasm": "WASM",
"install_failed": "Error al instalar el plugin: {reason}",
"installing": "Instalando plugin...",
- "badge_network": "Network",
- "network_endpoints": "Network endpoints",
- "previewing": "Reviewing plugin...",
+ "badge_network": "Red",
+ "network_endpoints": "Puntos de red",
+ "previewing": "Revisando plugin...",
"badge_python": "Python",
- "badge_signed": "Signed",
- "badge_trusted": "Trusted",
- "badge_invalid_signature": "Invalid signature",
- "badge_tampered": "Tampered"
+ "badge_signed": "Firmado",
+ "badge_trusted": "De confianza",
+ "badge_invalid_signature": "Firma no válida",
+ "badge_tampered": "Manipulado"
},
"permissions": {
- "none": "No elevated permissions",
- "hooks.announce.received": "Receive mesh announce events",
- "hooks.rns.link.event": "Receive RNS link packet and close events",
- "managers.destinationPath.read": "Read the Reticulum path table",
- "managers.rnsLink.open": "Open RNS links to destinations",
- "managers.rnsLink.identify": "Identify on RNS links",
- "managers.rnsLink.request": "Send request/response over RNS links",
- "managers.rnsLink.send": "Send packets over RNS links",
- "managers.rnsLink.close": "Close RNS links",
- "storage.isolated": "Use isolated plugin storage",
- "network.fetch": "Make outbound internet HTTP requests"
+ "none": "Sin permisos elevados",
+ "hooks.announce.received": "Recibir eventos de anuncio de malla",
+ "hooks.rns.link.event": "Recibir eventos de paquete y cierre de enlace RNS",
+ "managers.destinationPath.read": "Leer la tabla de rutas de Reticulum",
+ "managers.rnsLink.open": "Abrir enlaces RNS a destinos",
+ "managers.rnsLink.identify": "Identificarse en enlaces RNS",
+ "managers.rnsLink.request": "Enviar solicitud/respuesta a través de enlaces RNS",
+ "managers.rnsLink.send": "Enviar paquetes a través de enlaces RNS",
+ "managers.rnsLink.close": "Cerrar enlaces RNS",
+ "storage.isolated": "Usar almacenamiento aislado del complemento",
+ "network.fetch": "Realizar solicitudes HTTP salientes a Internet"
},
"install_dialog": {
- "title": "Install plugin",
- "network_title": "Install plugin with network access",
- "message": "Review permissions for \"{name}\" ({id}) before installing.",
- "permissions": "Requested permissions",
- "permissions_hint": "Uncheck any permission you do not want to grant. Denied capabilities stay unavailable at runtime.",
- "grant": "Allow",
- "network_endpoints": "External network endpoints",
- "network_endpoints_blocked": "Network access is not granted. These URLs will remain blocked.",
- "network_endpoints_unknown": "This plugin requests network access but did not declare specific endpoints.",
- "cancel": "Cancel",
- "confirm": "Install",
- "close": "Close",
- "signature": "Signature",
- "signature_unsigned": "Unsigned",
- "signature_signed": "Signed",
- "signature_trusted": "Trusted publisher",
- "signature_invalid": "Invalid signature (install blocked)",
- "trust_publisher": "Trust this publisher",
- "security_findings": "Security findings"
+ "title": "Instalar complemento",
+ "network_title": "Instalar complemento con acceso a la red",
+ "message": "Revise los permisos para \"{name}\" ({id}) antes de instalar.",
+ "permissions": "Permisos solicitados",
+ "permissions_hint": "Desmarque cualquier permiso que no desee conceder. Las capacidades denegadas permanecen no disponibles en tiempo de ejecución.",
+ "grant": "Permitir",
+ "network_endpoints": "Puntos de conexión de red externos",
+ "network_endpoints_blocked": "No se concede acceso a la red. Estas URL permanecerán bloqueadas.",
+ "network_endpoints_unknown": "Este complemento solicita acceso a la red pero no declaró puntos de conexión específicos.",
+ "cancel": "Cancelar",
+ "confirm": "Instalar",
+ "close": "Cerrar",
+ "signature": "Firma",
+ "signature_unsigned": "Sin firmar",
+ "signature_signed": "Firmado",
+ "signature_trusted": "Editor de confianza",
+ "signature_invalid": "Firma no válida (instalación bloqueada)",
+ "trust_publisher": "Confiar en este editor",
+ "security_findings": "Hallazgos de seguridad"
},
"sideband": {
- "title": "Sideband plugins",
- "description": "Optional Sideband-compatible Python plugins loaded from a directory. They run in-process with full host access when enabled.",
- "master_enable": "Enable Sideband plugin loader (dangerous)",
- "command_enable": "Enable Sideband command plugins",
- "path": "Plugin directory path",
- "save": "Save Sideband settings",
- "reload": "Reload Sideband plugins",
- "loaded": "Loaded Sideband plugins",
- "saved": "Sideband plugin settings saved",
- "reloaded": "Sideband plugins reloaded",
- "danger_confirm": "Sideband plugins run as full Python code inside MeshChatX with filesystem, network, and LXMF access. Enable only if you trust every script in the directory."
+ "title": "Plugins de Sideband",
+ "description": "Plugins Python opcionales compatibles con Sideband cargados desde un directorio. Se ejecutan en el mismo proceso con acceso completo al host cuando están habilitados.",
+ "master_enable": "Habilitar cargador de plugins de Sideband (peligroso)",
+ "command_enable": "Habilitar plugins de comando de Sideband",
+ "path": "Ruta del directorio de plugins",
+ "save": "Guardar configuración de Sideband",
+ "reload": "Recargar plugins de Sideband",
+ "loaded": "Plugins de Sideband cargados",
+ "saved": "Configuración de plugins de Sideband guardada",
+ "reloaded": "Plugins de Sideband recargados",
+ "danger_confirm": "Los plugins de Sideband se ejecutan como código Python completo dentro de MeshChatX con acceso al sistema de archivos, red y LXMF. Habilítalos solo si confías en cada script del directorio."
}
},
"selftest": {
"title": "Autoprueba del sistema",
- "description": "Run diagnostic checks for the network stack, database, identity, imports, storage, LXMF, subprocess/run-module, SQLite, identity files, loopback TCP, unicode paths, RNode helpers, bot launcher argv, HTTP status/config/health/auth/bots/security/interfaces/reticulum-instance/identities/favourites/telephone/plugins/sideband/RRC APIs, plugin runtime, WebSocket, RNS Link API, and bot lifecycle.",
+ "description": "Ejecute comprobaciones de diagnóstico para la pila de red, base de datos, identidad, importaciones, almacenamiento, LXMF, subproceso/módulo de ejecución, SQLite, archivos de identidad, TCP de bucle de retorno, rutas Unicode, ayudantes de RNode, argumentos del lanzador de bots, APIs HTTP de estado/configuración/salud/autenticación/bots/seguridad/interfaces/instancia de Reticulum/identidades/favoritos/teléfono/plugins/Sideband/RRC, tiempo de ejecución de plugins, WebSocket, API de enlace RNS y ciclo de vida de bots.",
"run_test_btn": "Ejecutar diagnóstico",
"running": "Ejecutando diagnóstico...",
"stack_up": "Pila de red",
"config_good": "Integridad de configuración",
"db_good": "Conexión a la base de datos",
"read_write": "Lectura/escritura de almacenamiento",
- "identity_good": "Identity Loaded",
- "imports_good": "Critical Imports",
- "storage_lock_good": "Storage Lock",
- "temp_fs_good": "Temp Filesystem",
- "public_assets_good": "Public Assets",
- "lxmf_router_good": "LXMF Router",
- "subprocess_good": "Subprocess Spawn",
- "run_module_good": "MeshChatX Run-Module",
- "sqlite_roundtrip": "SQLite Roundtrip",
- "identity_roundtrip": "Identity File Roundtrip",
- "loopback_tcp": "Loopback TCP Bind",
- "unicode_path_good": "Unicode Path I/O",
- "rnode_support_good": "RNode Support Module",
- "bot_launcher_good": "Bot Launcher Argv",
- "http_status_good": "HTTP Status",
- "http_app_info_good": "HTTP App Info",
- "http_config_good": "HTTP Config",
- "http_db_health_good": "HTTP Database Health",
- "http_auth_csrf_good": "HTTP Auth CSRF",
- "http_bots_status_good": "HTTP Bots Status",
- "http_security_good": "HTTP Server Security",
- "http_interfaces_good": "HTTP RNS Interfaces",
- "http_identities_good": "HTTP Identities",
- "http_favourites_good": "HTTP Favourites",
- "http_telephone_good": "HTTP Telephone Status",
+ "identity_good": "Identidad cargada",
+ "imports_good": "Importaciones críticas",
+ "storage_lock_good": "Bloqueo de almacenamiento",
+ "temp_fs_good": "Sistema de archivos temporal",
+ "public_assets_good": "Activos públicos",
+ "lxmf_router_good": "Enrutador LXMF",
+ "subprocess_good": "Creación de subprocesos",
+ "run_module_good": "Módulo de ejecución de MeshChatX",
+ "sqlite_roundtrip": "Prueba de ida y vuelta de SQLite",
+ "identity_roundtrip": "Prueba de ida y vuelta del archivo de identidad",
+ "loopback_tcp": "Enlace TCP de bucle local",
+ "unicode_path_good": "E/S de ruta Unicode",
+ "rnode_support_good": "Módulo de soporte RNode",
+ "bot_launcher_good": "Argv del Lanzador de Bots",
+ "http_status_good": "Estado HTTP",
+ "http_app_info_good": "Información de la App HTTP",
+ "http_config_good": "Configuración HTTP",
+ "http_db_health_good": "Salud de la Base de Datos HTTP",
+ "http_auth_csrf_good": "Autenticación HTTP CSRF",
+ "http_bots_status_good": "Estado de Bots HTTP",
+ "http_security_good": "Seguridad del Servidor HTTP",
+ "http_interfaces_good": "Interfaces RNS HTTP",
+ "http_identities_good": "Identidades HTTP",
+ "http_favourites_good": "Favoritos HTTP",
+ "http_telephone_good": "Estado de Teléfono HTTP",
"websocket_good": "WebSocket",
"bots_lifecycle": "Bot Crear / Iniciar / Detener / Eliminar",
"passed": "Aprobado",
@@ -824,17 +824,17 @@
"status_label": "Estado",
"reason_label": "Motivo",
"checks_completed": "Todas las comprobaciones se completaron con éxito.",
- "http_reticulum_instance_good": "HTTP RNS Instance Settings",
+ "http_reticulum_instance_good": "Configuración de Instancia RNS HTTP",
"expand_reason": "Mostrar detalles del fallo",
"collapse_reason": "Ocultar detalles del fallo",
- "http_plugins_good": "HTTP Plugins API",
- "http_plugins_trust_good": "HTTP Plugin Trust List",
- "http_sideband_plugins_good": "HTTP Sideband Plugins",
- "http_sideband_config_good": "HTTP Sideband Config",
- "http_rrc_hubs_good": "HTTP RRC Hubs",
- "http_rrc_servers_good": "HTTP RRC Servers",
- "plugins_runtime_good": "Plugin Manager Runtime",
- "websocket_rns_link_good": "WebSocket RNS Link API"
+ "http_plugins_good": "API de Plugins HTTP",
+ "http_plugins_trust_good": "Lista de Confianza de Plugins HTTP",
+ "http_sideband_plugins_good": "Plugins de Sideband HTTP",
+ "http_sideband_config_good": "Configuración de Sideband HTTP",
+ "http_rrc_hubs_good": "Hubs RRC HTTP",
+ "http_rrc_servers_good": "Servidores RRC HTTP",
+ "plugins_runtime_good": "Tiempo de ejecución del administrador de complementos",
+ "websocket_rns_link_good": "API de enlace WebSocket RNS"
},
"maintenance": {
"title": "Datos de mantenimiento",
@@ -845,17 +845,17 @@
"clear_announces_desc": "Quitar todos los pares descubiertos y nodos de su caché.",
"clear_nomadnet_favs": "Clear NomadNetwork Favoritos",
"clear_nomadnet_favs_desc": "Quitar todos los nodos de NomadNetwork guardados de tus favoritos.",
- "clear_lxmf_icons": "Clear LXMF Icons",
+ "clear_lxmf_icons": "Limpiar Iconos LXMF",
"clear_lxmf_icons_desc": "Eliminar los iconos de usuario LXMF caché de tu dispositivo.",
"clear_stickers": "Limpiar todas las pegatinas",
"clear_stickers_desc": "Retire cada imagen de pegatina guardada para esta identidad.",
"stickers_cleared": "Pegatinas limpiadas",
"clear_gifs": "Limpiar todos los GIF",
"clear_gifs_desc": "Quitar cada GIF salvado para esta identidad.",
- "gifs_cleared": "GIFs cleared",
+ "gifs_cleared": "GIFs eliminados",
"clear_archives": "Archivo de páginas claras",
"clear_archives_desc": "Eliminar todas las páginas de NomadNetwork caché.",
- "clear_reticulum_docs": "Clear Reticulum Docs",
+ "clear_reticulum_docs": "Limpiar Documentos de Reticulum",
"clear_reticulum_docs_desc": "Elimina todos los documentos y versiones de Reticulum descargados.",
"clear_path_table": "Borrar tabla de rutas",
"clear_path_table_desc": "Elimina todas las rutas de transporte Reticulum en caché. Las rutas se redescubrirán según sea necesario.",
@@ -909,12 +909,12 @@
"switched": "Identidad cambiada correctamente.",
"created": "Identidad creada con éxito",
"deleted": "Identidad eliminada",
- "failed_load": "Failed to load identities",
+ "failed_load": "No se pudieron cargar las identidades",
"enter_display_name_warning": "Por favor, introduzca un nombre de pantalla",
- "failed_create": "Failed to create identity",
+ "failed_create": "No se pudo crear la identidad",
"switch_scheduled": "Cambio programado. Reloading application...",
- "failed_switch": "Failed to switch identity",
- "failed_delete": "Failed to delete identity",
+ "failed_switch": "No se pudo cambiar la identidad",
+ "failed_delete": "No se pudo eliminar la identidad",
"key_control": "Control de clave de identidad",
"export_key_file": "Archivo clave de exportación",
"copy_base32": "Copiar Base32 clave",
@@ -948,7 +948,7 @@
"running_checks": "Corriendo cheques...",
"integrity": "Integridad",
"journal_mode": "Modo de publicación",
- "wal_autocheckpoint": "WAL autocheckpoint",
+ "wal_autocheckpoint": "Punto de control automático WAL",
"page_size": "Tamaño de la página",
"pages_free": "Páginas / Gratis",
"free_space_estimate": "Estimación del espacio libre",
@@ -956,13 +956,13 @@
"live": "Vivir",
"memory_rss": "Memoria (RSS)",
"virtual_memory": "Memoria Virtual",
- "network_stats": "Network Stats",
- "sent": "Sent",
+ "network_stats": "Estadísticas de red",
+ "sent": "Enviado",
"received": "Recibidos",
"packets_sent": "Paquetes enviados",
"packets_received": "Paquetes recibidos",
"reticulum_stats": "Estaciones de reticulum",
- "total_paths": "Total Paths",
+ "total_paths": "Rutas totales",
"announces_per_second": "Anuncios / sec",
"announces_per_minute": "Anuncios / min",
"announces_per_hour": "Anuncios / hr",
@@ -992,7 +992,7 @@
"failed_delete_snapshot": "Fallado para eliminar instantáneas",
"delete_backup_confirm": "¿Seguro que quieres eliminar esta copia de seguridad?",
"backup_deleted": "Copia de seguridad eliminada",
- "failed_delete_backup": "Failed to delete backup",
+ "failed_delete_backup": "Error al eliminar la copia de seguridad",
"database_restored": "Base de datos restaurada. Relanzar...",
"failed_restore_snapshot": "Fallado para restaurar instantáneas",
"restore_snapshot_confirm": "¿Estás seguro de que quieres restaurar esta instantánea? Esto sobreescribirá la base de datos actual y requerirá un relanzamiento de la app.",
@@ -1085,7 +1085,7 @@
},
"interfaces": {
"title": "Interfaces",
- "manage": "Manage",
+ "manage": "Gestionar",
"description": "Busca, filtra y exporta tus adaptadores Reticulum.",
"add_interface": "Agregar interfaz",
"edit_interface": "Editar interfaz",
@@ -1106,8 +1106,8 @@
"failed_disable": "no desactivar la interfaz",
"delete_confirm": "¿Estás seguro de que quieres borrar esta interfaz? ¡Esto no puede ser deshecho!",
"failed_delete": "no borrar interfaz",
- "failed_export_all": "Failed to export interfaces",
- "failed_export_single": "Failed to export interface",
+ "failed_export_all": "Error al exportar interfaces",
+ "failed_export_single": "Error al exportar interfaz",
"failed_reload": "¡Failed to reload Reticulum!",
"interface_not_found": "No se pudo encontrar la interfaz seleccionada para la edición.",
"discovery_settings_saved": "Ajustes de descubrimiento guardados",
@@ -1132,7 +1132,7 @@
"custom_external_docs_link": "Abrir manual Reticulum incluido",
"custom_external_type_required": "Introduzca el nombre del tipo de interfaz Reticulum.",
"custom_external_json_invalid": "JSON no válido para opciones adicionales.",
- "failed_save_discovery": "Failed to save discovery settings",
+ "failed_save_discovery": "Error al guardar configuración de descubrimiento",
"no_interfaces_found_config": "No se encontraron interfaces en el archivo de configuración seleccionado",
"failed_parse_config": "Failed to parse configuración file",
"select_config_file": "Seleccione un archivo de configuración",
@@ -1140,7 +1140,7 @@
"import_success": "Interfaces importadas con éxito. MeshChat debe ser reiniciado para que estos cambios surtan efecto.",
"failed_import_all": "No importar interfaces",
"add_interface_sidebar_a11y": "Atajos y presets comunitarios",
- "community_quick_start": "Community Quick-Start",
+ "community_quick_start": "Inicio Rápido Comunitario",
"community_quick_start_hint": "Presets de directorio.rns.recipes anuncios en línea.",
"community_quick_start_hide": "Ocultar interfaces sugeridas",
"community_use_preset": "Usa esto",
@@ -1188,24 +1188,24 @@
"online_mode": "Modo en línea",
"attribution": "Atribución",
"bounds": "Libras",
- "center": "Center",
+ "center": "Centrar",
"zoom": "Zoom",
"uploading": "Subiendo...",
"upload_success": "Mapa subido con éxito",
- "upload_failed": "Failed to upload map",
+ "upload_failed": "No se pudo subir el mapa",
"invalid_file": "Archivo de MBTiles inválido. Sólo las baldosas de raster son soportadas.",
"default_view": "Vista predeterminada",
"set_as_default": "Establecer como vista predeterminada",
"export_area": "Zona de exportación",
"export_instructions": "Arrastre en el mapa para seleccionar un área.",
- "min_zoom": "Min Zoom",
- "max_zoom": "Max Zoom",
+ "min_zoom": "Zoom mínimo",
+ "max_zoom": "Zoom máximo",
"tile_count": "Tejas estimadas",
- "start_export": "Start Export",
+ "start_export": "Iniciar exportación",
"exporting": "Exportando Mapa...",
"download_ready": "Exportación completa",
"download_now": "Descargar MBTiles",
- "caching_enabled": "Tile Caching",
+ "caching_enabled": "Caché de Teselas",
"clear_cache": "Caché transparente",
"cache_cleared": "Caché de azul claro",
"tile_server_url": "URL del servidor",
@@ -1213,7 +1213,7 @@
"tile_server_url_hint": "Utilice{z},{x},{y}para zoom, columna, fila",
"tile_server_saved": "URL del servidor del azul",
"tile_server_openstreetmap": "OpenStreetMap",
- "nominatim_api_url": "Nominatim API URL",
+ "nominatim_api_url": "URL de la API de Nominatim",
"nominatim_api_url_placeholder": "https://nominatim.openstreetmap.org",
"nominatim_api_url_hint": "Base URL para el servicio de geocodificación Nominatim",
"nominatim_api_saved": "Nominatim API URL guardado",
@@ -1235,10 +1235,10 @@
"onboarding_title": "Exportar a MBTiles!",
"onboarding_text": "Utilice la herramienta de exportación para descargar áreas de mapa como archivos MBTiles para uso offline.",
"onboarding_got_it": "Lo tengo",
- "tool_point": "Draw Point",
+ "tool_point": "Dibujar punto",
"tool_linestring": "Línea de dibujo",
"tool_polygon": "Dibujo Polygon",
- "tool_circle": "Draw Circle",
+ "tool_circle": "Dibujar círculo",
"tool_measure": "Distancia de Medición/Área",
"tool_bearing": "Rumbo y distancia (dos toques, sin conexión)",
"tool_bearing_from_here": "Rumbo desde mi ubicación con un toque",
@@ -1268,66 +1268,66 @@
"settings": "Ajustes de mapa",
"go_to_my_location": "Vaya a mi ubicación",
"source_updated": "Fuente de mapa actualizada",
- "failed_set_active": "Failed to set active map",
+ "failed_set_active": "No se pudo establecer el mapa activo",
"file_deleted": "Archivo eliminado",
- "failed_delete_file": "Failed to delete file",
+ "failed_delete_file": "Error al eliminar archivo",
"storage_saved": "Directorio de almacenamiento guardado",
- "failed_save_storage": "Failed to save directory",
+ "failed_save_storage": "No se pudo guardar el directorio",
"export_cancelled": "Exportación cancelada",
- "failed_cancel_export": "Failed to cancel export",
- "failed_start_export": "Failed to start export",
+ "failed_cancel_export": "Error al cancelar exportación",
+ "failed_start_export": "No se pudo iniciar la exportación",
"select_mbtiles_error": "Por favor seleccione un archivo .mbtiles",
"view_saved": "Vista predeterminada guardada",
"failed_save_view": "Fallado para guardar la vista predeterminada",
- "failed_clear_cache": "Failed to clear cache",
+ "failed_clear_cache": "Error al limpiar caché",
"failed_save_tile_server": "Fallado para guardar la URL del servidor de baldosas",
- "failed_save_nominatim": "Failed to save Nominatim API URL",
+ "failed_save_nominatim": "Error al guardar URL de API de Nominatim",
"copied_coordinates": "Coordenadas copiadas",
- "failed_load_drawings": "Failed to load drawings",
+ "failed_load_drawings": "Error al cargar dibujos",
"not_initialized": "Mapa no inicializado",
"drawing_saved": "Dibujo salvado",
- "failed_save_drawing": "Failed to save drawing",
+ "failed_save_drawing": "Error al guardar dibujo",
"deleted": "Suprimido",
- "failed_delete": "Failed to delete",
+ "failed_delete": "Error al eliminar",
"location_not_determined": "No podría determinar su ubicación",
"geolocation_not_supported": "Geolocalización no es compatible con su navegador",
"no_nodes_location": "No descubrieron nodos con localización encontrada",
- "failed_fetch_nodes": "Failed to fetch discovered nodes for mapping",
- "share_view": "Share map view (copy links)",
- "share_message_prefix": "MeshChatX map:",
- "share_copied": "Map links copied to clipboard",
- "ping_here": "Ping here (send in chat)",
- "ping_here_toolbar": "Ping map center in chat",
- "ping_modal_title": "Send map ping",
- "ping_destination": "Destination",
- "ping_pick_conversation": "Choose a conversation",
- "ping_send": "Send ping",
- "ping_sent": "Map ping sent",
- "ping_failed": "Could not send map ping",
- "ping_invalid_destination": "Pick a valid 32-character destination hash",
- "ping_message_prefix": "MeshChatX map ping:",
- "north_up": "North is up (map not rotated)",
- "export_tile_limit_exceeded": "Too many tiles for one export. Lower max zoom or shrink the area.",
- "export_region_world": "World (low zoom)",
- "export_region_europe": "Europe",
- "export_region_north_america": "North America",
- "export_region_south_america": "South America",
- "export_region_africa": "Africa",
+ "failed_fetch_nodes": "Error al obtener nodos descubiertos para mapeo",
+ "share_view": "Compartir vista del mapa (copiar enlaces)",
+ "share_message_prefix": "Mapa de MeshChatX:",
+ "share_copied": "Enlaces del mapa copiados al portapapeles",
+ "ping_here": "Ping aquí (enviar en el chat)",
+ "ping_here_toolbar": "Ping del centro del mapa en el chat",
+ "ping_modal_title": "Enviar ping de mapa",
+ "ping_destination": "Destino",
+ "ping_pick_conversation": "Elija una conversación",
+ "ping_send": "Enviar ping",
+ "ping_sent": "Ping de mapa enviado",
+ "ping_failed": "No se pudo enviar el ping del mapa",
+ "ping_invalid_destination": "Seleccione un hash de destino válido de 32 caracteres",
+ "ping_message_prefix": "Ping de mapa de MeshChatX:",
+ "north_up": "Norte arriba (mapa no rotado)",
+ "export_tile_limit_exceeded": "Demasiadas teselas para una exportación. Reduzca el zoom máximo o reduzca el área.",
+ "export_region_world": "Mundo (zoom bajo)",
+ "export_region_europe": "Europa",
+ "export_region_north_america": "América del Norte",
+ "export_region_south_america": "América del Sur",
+ "export_region_africa": "África",
"export_region_asia": "Asia",
- "export_region_oceania": "Oceania",
+ "export_region_oceania": "Oceanía",
"vector_exchange_title": "GeoJSON / KML / KMZ",
- "vector_exchange_merge": "Merge with existing drawings (uncheck to replace)",
+ "vector_exchange_merge": "Combinar con dibujos existentes (desmarcar para reemplazar)",
"vector_exchange_hint": "La importación admite iconos de varios formatos, incluidos GeoJSON y KML. Seleccione un dibujo para ver sus metadatos.",
- "vector_import_geojson": "Import GeoJSON",
- "vector_import_kml": "Import KML",
- "vector_import_kmz": "Import KMZ",
- "vector_export_geojson": "Export GeoJSON",
- "vector_export_kml": "Export KML",
- "vector_export_kmz": "Export KMZ",
- "vector_import_ok": "Imported {count} feature(s).",
- "vector_import_empty": "No features found in file.",
- "vector_import_failed": "Could not read vector file.",
- "vector_export_ok": "Export started.",
+ "vector_import_geojson": "Importar GeoJSON",
+ "vector_import_kml": "Importar KML",
+ "vector_import_kmz": "Importar KMZ",
+ "vector_export_geojson": "Exportar GeoJSON",
+ "vector_export_kml": "Exportar KML",
+ "vector_export_kmz": "Exportar KMZ",
+ "vector_import_ok": "Se importaron {count} elemento(s).",
+ "vector_import_empty": "No se encontraron elementos en el archivo.",
+ "vector_import_failed": "No se pudo leer el archivo vectorial.",
+ "vector_export_ok": "Exportación iniciada.",
"drop_geo_files": "Suelta el archivo del mapa aquí",
"drop_map_files_hint": "GeoJSON, KML, KMZ o MBTiles",
"drop_no_geo_files": "No se detectaron archivos GeoJSON, KML o KMZ.",
@@ -1341,20 +1341,20 @@
"disable": "Inhabilitación",
"enable": "Habilitación",
"edit_interface": "Editar interfaz",
- "export_interface": "Export Interface",
+ "export_interface": "Exportar Interfaz",
"delete_interface": "Eliminar la interfaz",
"listen": "Escucha.",
"forward": "Adelante.",
"port": "Puerto",
"frequency": "Frecuencia",
"bandwidth": "Ancho de banda",
- "txpower": "TX Power",
+ "txpower": "Potencia TX",
"spreading_factor": "SF",
"coding_rate": "Tasa de codificación",
- "bitrate": "Bitrate",
+ "bitrate": "Tasa de bits",
"tx": "TX",
"rx": "RX",
- "noise": "Noise",
+ "noise": "Ruido",
"clients": "Clientes",
"link_up": "Enlace activo",
"link_down": "Enlace inactivo",
@@ -1366,7 +1366,7 @@
"announces": "Anuncios",
"search_placeholder": "Buscar conversaciones{count}...",
"unread": "No.",
- "failed": "Failed",
+ "failed": "Falló",
"attachments": "Adjuntos",
"no_messages_yet": "Aún no hay mensajes",
"loading_conversations": "Cargando conversaciones...",
@@ -1376,10 +1376,10 @@
"try_another_search": "Pruebe un término de búsqueda diferente",
"no_search_results_conversations": "Tu búsqueda no coincidió con ninguna conversación.",
"search_placeholder_announces": "Búsqueda{count}recientes anuncia...",
- "no_peers_discovered": "No Peers Discovered",
+ "no_peers_discovered": "No se descubrieron pares",
"waiting_for_announce": "¡Esperando a que alguien anuncie!",
"no_search_results_peers": "¡Tu búsqueda no coincidió con ningún Peers!",
- "direct": "Direct",
+ "direct": "Directo",
"downloading": "Descarga",
"hops": "Umbrales{count}",
"hops_away": "{count}salta lejos",
@@ -1404,7 +1404,7 @@
"telemetry_battery_level": "Batería: {percent}%",
"telemetry_snr_db": "SNR: {snr} dB",
"telemetry_location_request": "Solicitud de ubicación",
- "start_call": "Call",
+ "start_call": "Llamar",
"share_contact": "Comparta contacto",
"share_contact_modal_title": "Compartir contacto",
"share_contact_search_placeholder": "Buscar contactos…",
@@ -1451,47 +1451,47 @@
"outbound_sent_network": "Enviado",
"no_messages_in_conversation": "Aún no hay mensajes en esta conversación.",
"say_hello": "¡Saluda!",
- "no_active_chat": "No Active Chat",
+ "no_active_chat": "Sin chat activo",
"mobile_compose_title": "Nuevo mensaje",
"mobile_compose_destination_placeholder": "destino de 32 caracteres hash...",
"select_peer_or_enter_address": "Seleccione un par desde la barra lateral o introduzca una dirección a continuación",
"add_files": "Agregar archivos",
"paste_from_clipboard": "Pegado desde el tablero de Clipboard",
"location": "Ubicación",
- "share_location": "Share Location",
+ "share_location": "Compartir ubicación",
"request_location": "Solicitud de ubicación",
"view_on_map": "Mapa",
"request": "Solicitud",
"generate_paper_message": "Generar mensaje de papel (LXM)",
"ingest_paper_message": "Mensaje de papel ingerido",
- "scan_qr": "Scan QR Code",
+ "scan_qr": "Escanear código QR",
"scanner_hint": "Indique su cámara en un código lxmf://, lxma:// o lxm:// QR.",
"camera_not_supported": "El escaneado de cámara QR no es compatible con este navegador.",
"camera_permission_denied": "Se niega el permiso de cámara. Por favor, permita el acceso a la cámara.",
"camera_not_found": "No hay dispositivo de cámara encontrado.",
- "camera_failed": "Failed to start camera scanner.",
+ "camera_failed": "Error al iniciar el escáner de cámara.",
"invalid_qr_uri": "Contenido inválido de QR. Se espera un lxmf://, lxma:// o lxm:// URI.",
"recording": "Grabación:{duration}",
"nomad_network_node": "Nodo de red nómada",
- "toggle_source": "Toggle Source Code",
- "folder_created": "Folder created",
+ "toggle_source": "Alternar código fuente",
+ "folder_created": "Carpeta creada",
"failed_create_folder": "Failed para crear carpeta",
- "folder_renamed": "Folder renamed",
- "failed_rename_folder": "Failed to rename folder",
+ "folder_renamed": "Carpeta renombrada",
+ "failed_rename_folder": "Error al renombrar carpeta",
"folder_deleted": "Carpeta eliminada",
- "failed_delete_folder": "Failed to delete folder",
+ "failed_delete_folder": "Error al eliminar carpeta",
"moved_to_folder": "Movedo a la carpeta",
- "failed_move_folder": "Failed to move to folder",
+ "failed_move_folder": "Error al mover a carpeta",
"marked_read": "Marcado como leído",
- "failed_mark_read": "Failed to mark as read",
+ "failed_mark_read": "Error al marcar como leído",
"conversations_deleted": "Conversaciones eliminadas",
"failed_delete_conversations": "Fallado para borrar conversaciones",
- "failed_export_folders": "Failed to export folders",
+ "failed_export_folders": "Error al exportar carpetas",
"folders_imported": "Carpetas importadas",
- "failed_import_folders": "Failed to import folders",
- "failed_read_clipboard": "Failed to read from clipboard",
- "clipboard_read_requires_secure_context": "Clipboard read needs a secure page (https or http://127.0.0.1). Using http://0.0.0.0 or another non-local HTTP origin blocks the Clipboard API—open the app on 127.0.0.1 or https, or paste with Ctrl+V.",
- "clipboard_write_unavailable": "Could not copy automatically. Open on https or http://127.0.0.1, or select the text and copy manually.",
+ "failed_import_folders": "Error al importar carpetas",
+ "failed_read_clipboard": "Error al leer del portapapeles",
+ "clipboard_read_requires_secure_context": "La lectura del portapapeles requiere una página segura (https o http://127.0.0.1). Usar http://0.0.0.0 u otro origen HTTP no local bloquea la API del portapapeles: abre la aplicación en 127.0.0.1 o https, o pega con Ctrl+V.",
+ "clipboard_write_unavailable": "No se pudo copiar automáticamente. Abre en https o http://127.0.0.1, o selecciona el texto y cópialo manualmente.",
"oversized_body_notice": "Este mensaje es demasiado grande para mostrarlo aquí ({count} caracteres). Copie el texto completo para leerlo o editarlo en otra aplicación.",
"oversized_body_copy": "Copiar texto completo",
"oversized_body_copied": "Texto completo del mensaje copiado",
@@ -1506,17 +1506,17 @@
"copy_message": "Copiar mensaje",
"message_copied": "Mensaje copiado",
"failed_copy_message": "No se pudo copiar el mensaje",
- "failed_send_ingest": "Failed to send ingest request",
+ "failed_send_ingest": "Error al enviar solicitud de ingesta",
"address_copied": "Tu dirección LXMF copiada para el portapapeles",
- "map_link_share_title": "Shared map view",
- "map_link_ping_title": "Map ping",
- "map_link_open": "Open on map",
- "map_link_copy_uri": "Copy meshchatx link",
- "map_link_copied": "Map link copied",
+ "map_link_share_title": "Vista de mapa compartida",
+ "map_link_ping_title": "Ping en el mapa",
+ "map_link_open": "Abrir en el mapa",
+ "map_link_copy_uri": "Copiar enlace de MeshChatX",
+ "map_link_copied": "Enlace del mapa copiado",
"hash_copied": "Hah de identidad copiado a portapapeles",
- "failed_to_copy_hash": "Failed to copy identity hash",
+ "failed_to_copy_hash": "Error al copiar hash de identidad",
"copy_hash": "Copiar hash",
- "failed_copy_address": "Failed to copy address",
+ "failed_copy_address": "Error al copiar dirección",
"translation_failed": "La traducción falló",
"translate_select_target": "Traducir a",
"translating_message": "Traduciendo...",
@@ -1525,16 +1525,16 @@
"show_translation": "Mostrar traducción",
"translate_message": "Traducir mensaje",
"translate_target_invalid": "Elija un idioma de destino distinto del de origen",
- "failed_add_contact": "Failed to add contact",
+ "failed_add_contact": "Error al añadir contacto",
"ingesting_paper_message": "Ingerir mensaje de papel...",
- "failed_ingest_paper": "Failed to ingest paper message",
+ "failed_ingest_paper": "Error al ingerir mensaje en papel",
"enter_display_name": "Introduzca un nombre de pantalla personalizado",
- "failed_update_display_name": "Failed to update display name",
+ "failed_update_display_name": "Error al actualizar nombre visible",
"failed_load_audio": "No se puede cargar el accesorio de audio.",
"no_contacts_telephone": "No hay contactos encontrados en el teléfono",
- "failed_load_contacts": "Failed to load contacts",
+ "failed_load_contacts": "Error al cargar contactos",
"location_request_sent": "Solicitud de ubicación enviada",
- "failed_send_location_request": "Failed to send location request",
+ "failed_send_location_request": "Error al enviar solicitud de ubicación",
"fetching_location": "Encontrar la ubicación...",
"location_disabled": "El uso compartido de ubicación está desactivado. Actívelo en Configuración > Ubicación.",
"location_sent": "Ubicación compartida con éxito",
@@ -1546,32 +1546,32 @@
"failed_start_recording_help_audio_worklet": "AudioWorklet no está admitido: las notas de voz OPUS lo necesitan.",
"failed_start_recording_help_permission": "Permita el acceso al micrófono o inténtelo de nuevo cuando otra app libere el micrófono.",
"remove_audio_confirm": "¿Estás seguro de que quieres eliminar este accesorio de audio?",
- "failed_generate_qr": "Failed to generate QR",
+ "failed_generate_qr": "Error al generar código QR",
"enter_folder_name": "Introduzca nombre de carpeta",
"new_folder": "Nueva carpeta",
"rename_folder": "Carpeta de nombre",
- "failed_render_qr": "Failed to render QR code",
+ "failed_render_qr": "Error al renderizar código QR",
"uri_copied": "URI copiado a portapapeles",
- "failed_copy_uri": "Failed to copy URI",
+ "failed_copy_uri": "Error al copiar URI",
"paper_message_sent": "Mensaje enviado con éxito",
- "failed_send_paper": "Failed to send paper message",
+ "failed_send_paper": "Error al enviar mensaje en papel",
"failed_load_config": "Failed to load settings",
"profile_icon_saved": "icono de perfil guardado con éxito",
- "failed_save_profile_icon": "Failed to save profile icon",
+ "failed_save_profile_icon": "Error al guardar icono de perfil",
"select_colors_warning": "Por favor seleccione ambos colores de fondo e icono",
"select_icon_warning": "Seleccione un icono",
"changes_reset": "Cambios reajustados a valores guardados",
"profile_icon_removed": "icono de perfil eliminado con éxito",
"user_banished": "Usuario desterrado con éxito",
- "failed_banish_user": "Failed to banish user",
+ "failed_banish_user": "Error al expulsar usuario",
"banish_user": "Destierra usuario",
"banish_confirm": "¿Seguro que quieres desterrar a este usuario? No podrán enviarle mensajes ni establecer enlaces.",
"delete_conversation_confirm": "¿Seguro que quieres borrar esta conversación?",
"failed_delete_conversation": "falló en borrar la conversación",
"delete_history_confirm": "¿Estás seguro de querer borrar todos los mensajes en esta conversación? ¡Esto no puede ser deshecho!",
"failed_delete_history": "no borrar la historia",
- "pin_conversation": "Pin conversation",
- "unpin_conversation": "Unpin conversation",
+ "pin_conversation": "Fijar conversación",
+ "unpin_conversation": "Desfijar conversación",
"failed_toggle_pin": "No podía actualizar el pin",
"opportunistic_deferred_label": "Esperando",
"opportunistic_deferred_tooltip": "El mensaje enviará tan pronto como el usuario venga en línea o anuncia.",
@@ -1590,23 +1590,23 @@
"snr_val": "SNR:{snr}dB",
"reply": "Respuesta",
"replying_to": "Respuesta a",
- "forward_banner_label": "Forwarded message",
- "forward_you_shared": "You're forwarding this quote",
- "forward_pick_recipient_title": "Forward to contact",
- "forward_message": "Forward",
- "forward_sent": "Message forwarded",
- "forward_failed": "Could not forward message",
- "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
- "forward_verify_show": "Source and verification",
- "forward_verify_hide": "Hide verification",
+ "forward_banner_label": "Mensaje reenviado",
+ "forward_you_shared": "Estás reenviando esta cita",
+ "forward_pick_recipient_title": "Reenviar a contacto",
+ "forward_message": "Reenviar",
+ "forward_sent": "Mensaje reenviado",
+ "forward_failed": "No se pudo reenviar el mensaje",
+ "forward_no_lxmf_destination": "Este contacto no tiene una dirección de entrega LXMF utilizable.",
+ "forward_verify_show": "Fuente y verificación",
+ "forward_verify_hide": "Ocultar verificación",
"forward_verify_explanation": "Los enlaces Paper LXMF solo funcionan si el mensaje completo está disponible y se ajusta a los límites de Paper. Los fragmentos citados pueden ser falsificados.",
- "forward_verify_loading": "Looking up verification URI…",
- "forward_verify_open_uri": "Open verification URI",
- "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
- "forward_verify_not_cached": "Original message bytes are not cached here.",
- "forward_verify_failed": "Verification lookup failed.",
- "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
- "forward_open_party_is_self": "That is your own address.",
+ "forward_verify_loading": "Buscando URI de verificación…",
+ "forward_verify_open_uri": "Abrir URI de verificación",
+ "forward_verify_unavailable": "Los bytes del mensaje original no están almacenados en caché aquí, por lo que no se pudo construir una URI de verificación.",
+ "forward_verify_not_cached": "Los bytes del mensaje original no están almacenados en caché aquí.",
+ "forward_verify_failed": "Falló la búsqueda de verificación.",
+ "forward_content_stub": "_Reenviado vía MeshChatX_\nLos archivos adjuntos y el texto citado pertenecen al remitente original.",
+ "forward_open_party_is_self": "Esa es tu propia dirección.",
"message_actions": "Acciones de mensajes",
"save_image_to_device": "Guardar imagen en el dispositivo",
"cancel_send": "Cancelar envío",
@@ -1638,9 +1638,9 @@
"failed_disable_transport": "¡Failed to disable transport mode!",
"failed_reload_reticulum": "¡Failed to reload Reticulum!",
"folders_exported": "Carpetas exportadas",
- "failed_export_folders": "Failed to export folders",
+ "failed_export_folders": "Error al exportar carpetas",
"folders_imported": "Carpetas y cartografías importadas con éxito",
- "failed_import_folders": "Failed to import folders",
+ "failed_import_folders": "Error al importar carpetas",
"share_apk_heading": "Compartir esta instalación",
"share_apk_desc": "Envía el paquete instalado de MeshChatX por Bluetooth, Nearby Share u otra app. Solo en la app de Android.",
"share_apk_short_hint": "Abre el menú del sistema para compartir este APK.",
@@ -1650,8 +1650,8 @@
"nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
"nomad_micron_wasm_link_label": "micron-parser-go",
"nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only.",
- "nomad_micron_default_engine_title": "Default Micron renderer (.mu)",
- "nomad_micron_default_engine_desc": "JavaScript is the default. WebAssembly uses micron-parser-go when the engine above is enabled and the module has loaded.",
+ "nomad_micron_default_engine_title": "Motor de renderizado Micron predeterminado (.mu)",
+ "nomad_micron_default_engine_desc": "JavaScript es el predeterminado. WebAssembly utiliza micron-parser-go cuando el motor anterior está habilitado y el módulo se ha cargado.",
"nomad_micron_default_engine_option_js": "JavaScript (micron-parser)",
"nomad_micron_default_engine_option_wasm": "WebAssembly (micron-parser-go)",
"micron_wasm_update_open_btn": "Actualizar motor WASM…",
@@ -1679,26 +1679,26 @@
"micron_wasm_update_toast_reverted": "Restaurado el WASM Micron incluido.",
"tabs": {
"general": "General",
- "general_desc": "Language, appearance, and platform",
- "messages": "Messages",
- "messages_desc": "LXMF, stickers, and safety",
- "network": "Network",
- "network_desc": "Transport, interfaces, and discovery",
+ "general_desc": "Idioma, apariencia y plataforma",
+ "messages": "Mensajes",
+ "messages_desc": "LXMF, stickers y seguridad",
+ "network": "Red",
+ "network_desc": "Transporte, interfaces y descubrimiento",
"nomad": "Nomad",
- "nomad_desc": "Archiver and page rendering",
- "privacy": "Privacy",
- "privacy_desc": "Data, access, and security",
- "maintenance": "Maintenance",
- "maintenance_desc": "Cleanup, export, and import",
+ "nomad_desc": "Archivador y renderizado de páginas",
+ "privacy": "Privacidad",
+ "privacy_desc": "Datos, acceso y seguridad",
+ "maintenance": "Mantenimiento",
+ "maintenance_desc": "Limpieza, exportación e importación",
"plugins": "Complementos",
"plugins_desc": "Instalar y gestionar complementos de MeshChatX"
},
- "failed_update_reticulum_instance": "Failed to update Reticulum instance settings!"
+ "failed_update_reticulum_instance": "¡Error al actualizar la configuración de la instancia de Reticulum!"
},
"debug": {
- "title": "Debug Logs",
+ "title": "Registros de depuración",
"description": "Registros de aplicación y de acceso, filtro por gravedad y búsqueda para resolver incidencias.",
- "tab_logs": "Logs",
+ "tab_logs": "Registros",
"tab_access_attempts": "Pruebas de acceso",
"search_logs_placeholder": "Registros de búsqueda...",
"search_access_placeholder": "Búsqueda IP, ruta, resultado...",
@@ -1713,38 +1713,38 @@
"failed_fetch_access": "Failed to lotch access attempts",
"logs_copied": "Registros en esta página copiados a portapapeles",
"access_copied": "Los intentos de acceso copiados al portapapeles",
- "failed_copy_logs": "Failed to copy logs",
+ "failed_copy_logs": "No se pudieron copiar los registros",
"failed_copy_access": "Sin copiar los intentos de acceso"
},
"visualiser": {
- "title": "Network Visualiser",
+ "title": "Visualizador de red",
"description": "Gráfico de nodos descubiertos y enlaces.",
- "reticulum_mesh": "Reticulum Mesh",
- "network_visualizer": "Network Visualizer",
- "node_info": "Node Info",
+ "reticulum_mesh": "Malla Reticulum",
+ "network_visualizer": "Visualizador de red",
+ "node_info": "Información del nodo",
"hash": "Hash",
- "hops": "Hops",
+ "hops": "Saltos",
"interface": "Interfaz",
"rssi": "RSSI",
"snr": "SNR",
"first_seen": "Primera vista",
"last_seen": "Último visto",
- "center_node": "Center on node",
+ "center_node": "Centrar en nodo",
"copy_hash": "Copiado Hash",
"banish_identity": "Identidad prohibida",
"banished_identities": "Identidades desterradas",
"filter_nodes": "Nodos filtrantes...",
"all": "Todos",
- "direct": "Direct",
- "one_hop": "1 Hop",
- "multi_hops": "2+ Hops",
+ "direct": "Directo",
+ "one_hop": "1 salto",
+ "multi_hops": "2+ saltos",
"clear": "Despejado",
"show_labels": "Mostrar todas las etiquetas",
"show_edges": "Mostrar bordes",
"show_tooltips": "Mostrar puntas de herramienta",
"show_rssi": "Mostrar RSSI",
"show_snr": "Mostrar SNR",
- "show_hops": "Show Hops",
+ "show_hops": "Mostrar saltos",
"physics": "Física",
"gravity": "Gravedad",
"spring_length": "Longitud de la primavera",
@@ -1756,15 +1756,15 @@
"barns_hut": "Barns Hut",
"repulsion": "Repulsión",
"reset_physics": "Reiniciar la física",
- "reset_camera": "Reset Camera",
+ "reset_camera": "Restablecer cámara",
"clear_graph": "Gráfico claro",
"total_nodes": "Total de nodos",
- "total_edges": "Total edges",
+ "total_edges": "Total de aristas",
"discovered": "Descubierta",
"wait_between_batches": "Espera entre lotes",
- "batch": "Batch",
+ "batch": "Lote",
"loading_status": "Estado de carga",
- "failed_load": "Failed to load network data",
+ "failed_load": "Error al cargar datos de red",
"max_hops_filter": "Max Hops",
"show_disabled_interfaces": "Mostrar interfaces offline",
"show_discovered_interfaces": "Mostrar interfaces descubiertas"
@@ -1772,7 +1772,7 @@
"banishment": {
"title": "Desterrados",
"description": "Revisar y levantar bloques sobre identidades y nodos.",
- "failed_load_banished": "Failed to load banished destinations",
+ "failed_load_banished": "Error al cargar destinos desterrados",
"search_placeholder": "Búsqueda por hash o nombre de la pantalla...",
"loading_items": "Cargando artículos desterrados...",
"no_items": "No hay objetos desterrados encontrados",
@@ -1783,10 +1783,10 @@
"reason": "Razón",
"type": "Tipo",
"user": "Usuario",
- "node": "Node",
+ "node": "Nodo",
"blocked_destinations": "Destinos bloqueados",
"banishment_lifted": "El destierro se levantó con éxito",
- "failed_lift_banishment": "Failed to lift banishment",
+ "failed_lift_banishment": "Error al levantar el destierro",
"lift_selected": "Levantar destierro ({count})",
"lift_selected_confirm": "¿Levantar el destierro de {count} elementos seleccionados?",
"lift_selected_success": "Destierro levantado para {count} elementos",
@@ -1810,7 +1810,7 @@
"viewing_archived_version_from": "Ver versión archivada de{time}",
"viewing_archived_version": "Ver versión archivada",
"load_live": "Carga en vivo",
- "failed_to_load_page": "Failed to load page",
+ "failed_to_load_page": "Error al cargar la página",
"archived_version_available": "Una versión archivada de esta página está disponible.",
"view_archive": "Ver archivo",
"no_active_node": "Nodo activo",
@@ -1822,7 +1822,7 @@
"announces": "Anuncios",
"search_favourites_placeholder": "Búsqueda{count}favoritos ...",
"search_placeholder_announces": "Búsqueda{count}recientes anuncia...",
- "rename": "Rename",
+ "rename": "Renombrar",
"remove": "Retirar",
"no_favourites": "Sin favoritos",
"add_nodes_from_announces": "Agregue nodos de la pestaña anuncia.",
@@ -1838,7 +1838,7 @@
"listening_for_peers": "Escuchando a compañeros en la malla.",
"block_node_confirm": "¿Estás seguro de que quieres desterrar{name}? Sus anuncios serán ignorados y no aparecerán en la secuencia de anuncios.",
"node_blocked_successfully": "Nodo desterrado con éxito",
- "failed_to_block_node": "Failed to banish node",
+ "failed_to_block_node": "Error al desterrar nodo",
"failed_rename_favourite": "Failed to rename favorite",
"rename_favourite": "Renombrar este favorito",
"remove_favourite_confirm": "¿Estás seguro de que quieres quitar este favorito?",
@@ -1847,7 +1847,7 @@
"page_archived_successfully": "Página archivada con éxito.",
"identify_confirm": "¿Estás seguro de que quieres identificarte con este Nodo NomadNetwork? La página se recargará después de que su identidad haya sido enviada.",
"banishment_lifted": "El destierro se levantó con éxito",
- "failed_lift_banishment": "Failed to lift banishment",
+ "failed_lift_banishment": "Error al levantar el destierro",
"lift_banishment": "Destierro",
"enter_section_name": "Introduzca el nombre de la sección",
"new_section": "Sección nueva",
@@ -1863,17 +1863,17 @@
"renderer_popover_micron_wasm_powered": "Impulsado por ",
"renderer_popover_micron_wasm_active_tail": " {version}. Motor WebAssembly.",
"renderer_popover_micron_wasm_pending_tail": " {version} se está cargando o no está disponible. Usando la versión estándar.",
- "renderer_switch_title": "Parser",
+ "renderer_switch_title": "Analizador",
"renderer_menu_js": "Micron: JavaScript",
"renderer_menu_wasm": "Micron: WebAssembly",
"renderer_setting_failed": "No se pudo actualizar el renderizador Micron",
"multiline_hint": "Pulse Intro de nuevo para ampliar a varias líneas",
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
- "renderer_chip_plaintext": "Text",
- "renderer_hint_markdown": "Markdown renderer",
- "renderer_hint_html": "Sanitized HTML",
- "renderer_hint_plaintext": "Escaped plain text",
+ "renderer_chip_plaintext": "Texto",
+ "renderer_hint_markdown": "Renderizador Markdown",
+ "renderer_hint_html": "HTML sanitizado",
+ "renderer_hint_plaintext": "Texto plano escapado",
"load_phase_default": "Cargando página",
"load_phase_finding_path": "Buscando un camino de red hacia el nodo",
"load_phase_establishing_link": "Establecer vínculos con el nodo",
@@ -1926,16 +1926,16 @@
"open_node_failed": "No se pudo abrir el nodo NomadNet"
},
"forwarder": {
- "title": "LXMF Forwarder",
+ "title": "Reenviador LXMF",
"description": "Forward LXMF entre direcciones con réplica conservado.",
- "add_rule": "Add Forwarding Rule",
+ "add_rule": "Agregar regla de reenvío",
"name": "Nombre",
"name_placeholder": "Nombre de la regla (por ejemplo, Nodo de inicio)...",
"forward_to_hash": "Adelante a Hash",
"destination_placeholder": "Destino LXMF hash...",
"source_filter": "Filtro fuente (Opcional)",
"source_filter_placeholder": "Sólo adelante de este hachís...",
- "add_button": "Add Rule",
+ "add_button": "Agregar regla",
"active_rules": "Reglas activas",
"no_rules": "No hay reglas de reenvío configuradas.",
"active": "Activo",
@@ -1956,23 +1956,23 @@
"view": "Vista",
"showing_range": "Mostrando{start}a{end}de archivos{total}",
"page_of": "Página{page}de{total_pages}",
- "export_mu": "Export .mu",
- "export_selected_mu": "Export .mu ({count})",
- "nodes_title": "Nodes",
- "snapshots_title": "Snapshots",
- "select_all": "Select all",
- "delete_selected": "Delete ({count})",
- "viewing_archive": "Viewing archive",
- "select_snapshot": "Select a snapshot to view",
- "open_live": "Open live",
- "search_nodes_placeholder": "Search nodes or content...",
- "no_results": "No results found",
- "no_archives": "No archives yet",
- "show_nodes": "Show nodes",
- "hide_nodes": "Hide nodes",
- "show_snapshots": "Show snapshots",
- "hide_snapshots": "Hide snapshots",
- "delete_snapshot": "Delete snapshot"
+ "export_mu": "Exportar .mu",
+ "export_selected_mu": "Exportar .mu ({count})",
+ "nodes_title": "Nodos",
+ "snapshots_title": "Instantáneas",
+ "select_all": "Seleccionar todo",
+ "delete_selected": "Eliminar ({count})",
+ "viewing_archive": "Viendo archivo",
+ "select_snapshot": "Selecciona una instantánea para ver",
+ "open_live": "Abrir en vivo",
+ "search_nodes_placeholder": "Buscar nodos o contenido...",
+ "no_results": "No se encontraron resultados",
+ "no_archives": "Aún no hay archivos",
+ "show_nodes": "Mostrar nodos",
+ "hide_nodes": "Ocultar nodos",
+ "show_snapshots": "Mostrar instantáneas",
+ "hide_snapshots": "Ocultar instantáneas",
+ "delete_snapshot": "Eliminar instantánea"
},
"docs": {
"title": "Documentación",
@@ -2012,7 +2012,7 @@
"error": "Error",
"failed_upload_docs": "Error al subir la documentación",
"docs_link_copied": "Enlace de documentación copiado al portapapeles",
- "failed_copy_link": "Failed to copy link",
+ "failed_copy_link": "No se pudo copiar el enlace",
"load_list_failed": "No se pudo cargar la lista de guías. Inténtalo de nuevo en un momento.",
"load_doc_failed": "No se pudo cargar esta guía.",
"search_failed": "La búsqueda falló. Comprueba tu conexión e inténtalo de nuevo.",
@@ -2040,7 +2040,7 @@
"diagnostics_description": "Utilidades de malla y Reticulum en un mismo sitio: alcance, rutas, transferencia de archivos, traducción, documentación y ayudas de hardware. Abra una fila para la herramienta completa.",
"back_to_tools": "Volver a herramientas",
"beta_badge": "Beta",
- "alpha_badge": "Alpha",
+ "alpha_badge": "Alfa",
"ping": {
"title": "Ping",
"description": "Medir el tiempo de ida y vuelta a un destino que acepta ping."
@@ -2055,7 +2055,7 @@
},
"rnsh": {
"title": "RNSH",
- "description": "Manage persistent rnsh sessions"
+ "description": "Gestionar sesiones rnsh persistentes"
},
"rnstatus": {
"title": "RNStatus",
@@ -2068,24 +2068,24 @@
"path_dropped": "Camino caído",
"failed_drop": "No podía abandonar el camino.",
"error_drop": "Camino de deserción",
- "failed_request": "Failed to request path",
+ "failed_request": "Error al solicitar ruta",
"paths_dropped": "Senderos caídos",
- "failed_drop_paths": "Failed to drop paths",
+ "failed_drop_paths": "Error al eliminar rutas",
"purge_confirm": "¿Purge anuncian colas? Esto no puede ser deshecho.",
"queues_purged": "Anuncio queues purged",
- "failed_purge": "Failed to purge queues"
+ "failed_purge": "Error al purgar colas"
},
"rnpath_trace": {
"title": "RNS Path Trace",
"description": "Mostrar la lista de acaparadores hacia un hash destino.",
"destination_hash": "Destino Hash",
"placeholder": "Ingrese el destino de 32 caracteres hash...",
- "trace": "Trace Path",
+ "trace": "Trazar Ruta",
"tracing": "Trazando el camino a través de la malla...",
- "total_hops": "Total Hops",
- "interface": "Exit Interface",
+ "total_hops": "Saltos Totales",
+ "interface": "Interfaz de Salida",
"next_hop": "Siguiente Hop",
- "ready_title": "Trace a Path",
+ "ready_title": "Trazar una Ruta",
"ready_desc": "Ingrese un hash destino para enumerar los hops a lo largo del camino actual.",
"unknown_hops": "{count}Hops intermedios",
"ping_test": "Prueba con Ping"
@@ -2095,7 +2095,7 @@
"description": "Traducir texto a través de un servidor LibreTranslate o Argos Traducir local."
},
"forwarder": {
- "title": "Forwarder",
+ "title": "Reenviador",
"description": "Forward LXMF entre direcciones con réplica conservado."
},
"propagation_nodes": {
@@ -2157,88 +2157,88 @@
"flow_no_rules": "Sin reglas"
},
"message_blocklist": {
- "title": "Message blocklist",
- "description": "Auto-banish senders when their message or name matches a word or regex from your shared blocklist.",
- "beta_notice_title": "Beta (work in progress)",
- "beta_notice_body": "This tool is off until you turn it on. Words match regardless of case. Regex uses normal patterns. If something matches, the sender gets banished right away. Export a list to share with your group, or import one to merge or replace yours.",
- "enable_label": "Enable message blocklist",
- "enable_hint": "When disabled, entries are saved but no automatic banish runs.",
- "entries_heading": "Blocked phrases",
- "add_entry": "Add phrase",
- "empty_entries": "No phrases yet. Add entries or import a shared list.",
- "entry_enabled": "Active",
- "entry_placeholder": "spam phrase or regex pattern",
- "remove_entry": "Remove",
- "scope_label": "Applies to",
- "scope_everyone": "Everyone",
- "scope_contacts": "Contacts only",
- "scope_non_contacts": "Non-contacts only",
- "match_in_label": "Match in",
- "match_message": "Message title and body",
- "match_peer_fields": "Peer display name and contact fields",
- "match_mode_substring": "Word",
- "match_mode_regex": "Regex",
- "export": "Export",
- "import": "Import",
- "save": "Save",
- "saving": "Saving…",
- "revert": "Reload",
- "saved": "Blocklist saved",
- "save_failed": "Could not save blocklist",
- "load_failed": "Could not load blocklist",
- "enabled_toast": "Message blocklist enabled",
- "disabled_toast": "Message blocklist disabled",
- "exported": "Blocklist exported",
- "export_failed": "Could not export blocklist",
- "import_merge_confirm": "Merge with your current list? Choose Cancel to replace your list entirely.",
- "imported_merge": "Blocklist merged",
- "imported_replace": "Blocklist replaced",
- "import_failed": "Could not import blocklist"
+ "title": "Lista de bloqueo de mensajes",
+ "description": "Destierra automáticamente a los remitentes cuando su mensaje o nombre coincide con una palabra o expresión regular de tu lista de bloqueo compartida.",
+ "beta_notice_title": "Beta (trabajo en progreso)",
+ "beta_notice_body": "Esta herramienta está desactivada hasta que la enciendas. Las palabras coinciden sin importar mayúsculas/minúsculas. Las expresiones regulares usan patrones normales. Si algo coincide, el remitente es desterrado de inmediato. Exporta una lista para compartir con tu grupo, o importa una para fusionar o reemplazar la tuya.",
+ "enable_label": "Activar lista de bloqueo de mensajes",
+ "enable_hint": "Cuando está desactivada, las entradas se guardan pero no se ejecuta ningún destierro automático.",
+ "entries_heading": "Frases bloqueadas",
+ "add_entry": "Agregar frase",
+ "empty_entries": "Aún no hay frases. Agrega entradas o importa una lista compartida.",
+ "entry_enabled": "Activa",
+ "entry_placeholder": "frase de spam o patrón regex",
+ "remove_entry": "Eliminar",
+ "scope_label": "Se aplica a",
+ "scope_everyone": "Todos",
+ "scope_contacts": "Solo contactos",
+ "scope_non_contacts": "Solo no contactos",
+ "match_in_label": "Coincidir en",
+ "match_message": "Título y cuerpo del mensaje",
+ "match_peer_fields": "Nombre para mostrar del par y campos de contacto",
+ "match_mode_substring": "Palabra",
+ "match_mode_regex": "Expresión regular",
+ "export": "Exportar",
+ "import": "Importar",
+ "save": "Guardar",
+ "saving": "Guardando…",
+ "revert": "Recargar",
+ "saved": "Lista de bloqueo guardada",
+ "save_failed": "No se pudo guardar la lista de bloqueo",
+ "load_failed": "No se pudo cargar la lista de bloqueo",
+ "enabled_toast": "Lista de bloqueo de mensajes activada",
+ "disabled_toast": "Lista de bloqueo de mensajes desactivada",
+ "exported": "Lista de bloqueo exportada",
+ "export_failed": "No se pudo exportar la lista de bloqueo",
+ "import_merge_confirm": "¿Fusionar con tu lista actual? Elige Cancelar para reemplazar tu lista por completo.",
+ "imported_merge": "Lista de bloqueo fusionada",
+ "imported_replace": "Lista de bloqueo reemplazada",
+ "import_failed": "No se pudo importar la lista de bloqueo"
},
"repository_server": {
"title": "Servidor de repositorio",
"description": "Redistribuya ruedas Python de MeshChatX y del ecosistema Reticulum, y sus propios archivos, por HTTP sin cifrar para que otros en su red o en este equipo puedan descargarlos.",
"subtitle": "Actualice los paquetes de software incluidos, agregue sus propios archivos o inicie una página de descarga para otros dispositivos.",
- "back_tools": "Back to tools",
- "http_heading": "Plain HTTP mirror",
- "host_label": "Listen address",
- "port_label": "Port",
- "start_http": "Start",
- "stop_http": "Stop",
- "restart_http": "Restart",
- "http_listen_label": "Listening:",
- "open_http": "Open in browser",
- "http_started": "HTTP server started",
- "http_stopped": "HTTP server stopped",
- "http_restarted": "HTTP server restarted",
- "http_err_generic": "HTTP server request failed",
- "http_err_invalid_host": "Invalid listen address",
- "http_err_invalid_port": "Invalid port",
- "http_err_already_running": "HTTP server is already running",
- "http_err_bind_failed": "Could not bind (port in use or permission denied)",
- "upload_heading": "Upload file",
- "choose_file": "Choose file",
- "refresh_bundled_tooltip": "Download bundled wheels to this device (needs network)",
- "refresh_started": "Downloading bundled packages…",
- "refresh_fetching": "Getting {pkg}…",
- "refresh_ok": "Bundled wheels refreshed",
- "refresh_ok_count": "{n} packages downloaded",
- "refresh_failed": "Could not refresh bundled wheels",
- "refresh_pip_missing": "pip was not found on this system. Install pip and try again.",
- "refresh_partial": "Some packages could not be downloaded (details below)",
- "refresh_partial_toast": "Bundled download finished with some failures",
- "files_heading": "Files",
- "col_name": "Name",
- "col_source": "Source",
- "col_size": "Size",
- "empty": "No files yet. Upload a file or refresh bundled wheels.",
- "delete": "Delete",
- "delete_confirm": "Delete uploaded file \"{name}\"?",
- "delete_ok": "File removed",
- "delete_failed": "Could not delete file",
- "upload_ok": "File uploaded",
- "upload_failed": "Upload failed",
- "load_failed": "Could not load repository"
+ "back_tools": "Volver a herramientas",
+ "http_heading": "Espejo HTTP simple",
+ "host_label": "Dirección de escucha",
+ "port_label": "Puerto",
+ "start_http": "Iniciar",
+ "stop_http": "Detener",
+ "restart_http": "Reiniciar",
+ "http_listen_label": "Escuchando:",
+ "open_http": "Abrir en el navegador",
+ "http_started": "Servidor HTTP iniciado",
+ "http_stopped": "Servidor HTTP detenido",
+ "http_restarted": "Servidor HTTP reiniciado",
+ "http_err_generic": "Error en la solicitud al servidor HTTP",
+ "http_err_invalid_host": "Dirección de escucha no válida",
+ "http_err_invalid_port": "Puerto no válido",
+ "http_err_already_running": "El servidor HTTP ya está en ejecución",
+ "http_err_bind_failed": "No se pudo enlazar (puerto en uso o permiso denegado)",
+ "upload_heading": "Subir archivo",
+ "choose_file": "Elegir archivo",
+ "refresh_bundled_tooltip": "Descargar ruedas empaquetadas a este dispositivo (necesita red)",
+ "refresh_started": "Descargando paquetes empaquetados…",
+ "refresh_fetching": "Obteniendo {pkg}…",
+ "refresh_ok": "Ruedas empaquetadas actualizadas",
+ "refresh_ok_count": "{n} paquetes descargados",
+ "refresh_failed": "No se pudieron actualizar las ruedas empaquetadas",
+ "refresh_pip_missing": "No se encontró pip en este sistema. Instala pip e inténtalo de nuevo.",
+ "refresh_partial": "Algunos paquetes no se pudieron descargar (detalles abajo)",
+ "refresh_partial_toast": "La descarga empaquetada finalizó con algunos fallos",
+ "files_heading": "Archivos",
+ "col_name": "Nombre",
+ "col_source": "Origen",
+ "col_size": "Tamaño",
+ "empty": "Aún no hay archivos. Sube un archivo o actualiza los paquetes incluidos.",
+ "delete": "Eliminar",
+ "delete_confirm": "¿Eliminar el archivo subido \"{name}\"?",
+ "delete_ok": "Archivo eliminado",
+ "delete_failed": "No se pudo eliminar el archivo",
+ "upload_ok": "Archivo subido",
+ "upload_failed": "Subida fallida",
+ "load_failed": "No se pudo cargar el repositorio"
},
"rnode_flasher": {
"title": "RNode Flasher",
@@ -2263,20 +2263,20 @@
"connecting_device": "Conectando al dispositivo...",
"download_firmware": "Descargar Firmware",
"official_firmware": "Firmware oficial",
- "ce_firmware": "CE Firmware",
- "transport_node_firmware": "Transport Node Firmware",
+ "ce_firmware": "Firmware CE",
+ "transport_node_firmware": "Firmware de Nodo de Transporte",
"common_issues": "Cuestiones comunes",
- "hardware_failure": "Hardware Failure:",
+ "hardware_failure": "Fallo de hardware:",
"provision_eeprom_hint": "Necesita proporcionar el eeprom en el paso 3.",
- "firmware_corrupt": "Firmware Corrupt:",
+ "firmware_corrupt": "Firmware corrupto:",
"set_firmware_hash_hint": "Necesitas establecer el firmware hash en el paso 4.",
"step_provision": "3. Disposición EEPROM",
"provision_description": "Configura información del dispositivo, checksum y firma en blanco",
"provision": "Disposición",
"provisioning_wait": "Disposición: por favor espere...",
- "step_set_hash": "4. Set Firmware Hash",
+ "step_set_hash": "4. Establecer hash del firmware",
"set_hash_description": "Usos hah desde el tablero",
- "set_firmware_hash": "Set Firmware Hash",
+ "set_firmware_hash": "Establecer hash del firmware",
"setting_hash_wait": "Firmware Hash: por favor espere...",
"step_done": "5. Finalización",
"download_recommended": "Descargar &amp; Cargar Firmware recomendado",
@@ -2287,10 +2287,10 @@
"restart_warning": "Usted debe reiniciar MeshChat y Sideband para que los cambios de configuración de interfaz surtan efecto, de lo contrario nada sucederá!",
"advanced_tools": "Herramientas avanzadas",
"detect_rnode": "Detectar RNode",
- "reboot_rnode": "Reboot RNode",
+ "reboot_rnode": "Reiniciar RNode",
"read_display": "Visualización de lectura",
- "dump_eeprom": "Dump EEPROM",
- "wipe_eeprom": "Wipe EEPROM",
+ "dump_eeprom": "Volcar EEPROM",
+ "wipe_eeprom": "Limpiar EEPROM",
"eeprom_console_hint": "Los vertederos EEPROM se muestran en consola de herramientas dev.",
"configure_bluetooth": "Configurar Bluetooth (opcional)",
"bluetooth_info_1": "Bluetooth no es compatible en todos los dispositivos.",
@@ -2309,7 +2309,7 @@
"tnc_warning": "Debe dejar el modo TNC desactivado al usar RNode con aplicaciones como MeshChat o Sideband.",
"frequency": "Frecuencia (Hz)",
"bandwidth": "Ancho de banda",
- "tx_power": "Tx Power (dBm)",
+ "tx_power": "Potencia de Tx (dBm)",
"spreading_factor": "Factor de propagación",
"coding_rate": "Tasa de codificación",
"configure_display": "Visualización de configuración",
@@ -2350,11 +2350,11 @@
"failed_start_pairing": "Failed to start pairing:{error}",
"failed_set_rotation": "Failed to set display shift:{error}",
"failed_start_reconditioning": "Failed para iniciar el reacondicionamiento de la pantalla:{error}",
- "no_main_bin": "Could not locate the main firmware binary in the ZIP.",
- "invalid_host": "Please enter a valid host or IP address.",
- "bluetooth_flash_unsupported": "Bluetooth cannot be used to flash firmware. Use Serial or WiFi to flash, then return to Bluetooth for management.",
- "failed_diagnostics": "Failed to run diagnostics: {error}",
- "failed_detect_with_reason": "Failed to detect RNode: {error}"
+ "no_main_bin": "No se pudo localizar el binario principal del firmware en el ZIP.",
+ "invalid_host": "Ingrese un host o dirección IP válida.",
+ "bluetooth_flash_unsupported": "Bluetooth no se puede usar para flashear firmware. Use Serial o WiFi para flashear, luego vuelva a Bluetooth para la gestión.",
+ "failed_diagnostics": "Error al ejecutar el diagnóstico: {error}",
+ "failed_detect_with_reason": "Error al detectar RNode: {error}"
},
"alerts": {
"firmware_downloaded": "El firmware recomendado ha sido descargado y cargado.",
@@ -2375,70 +2375,70 @@
"bluetooth_pairing_started": "Modo de unión iniciado (30s)",
"rotation_updated": "Rotación actualizada",
"reconditioning_started": "Reacondicionamiento",
- "diagnostics_healthy": "Diagnostics: device looks healthy.",
- "diagnostics_issues": "Diagnostics: {count} issue(s) detected."
+ "diagnostics_healthy": "Diagnóstico: el dispositivo parece saludable.",
+ "diagnostics_issues": "Diagnóstico: {count} problema(s) detectado(s)."
},
"simple": "Simple",
- "advanced": "Advanced",
+ "advanced": "Avanzado",
"original": "Original",
- "open_original_tab": "Open the original flasher in a new tab",
+ "open_original_tab": "Abrir el flasher original en una nueva pestaña",
"bluetooth": "Bluetooth",
- "preparing_firmware": "Preparing firmware...",
- "uploading": "Uploading: {percentage}%",
- "select_firmware_file": "Or select a firmware file (.zip)",
- "wifi_help": "The IP address of your RNode on the local network.",
- "run_diagnostics": "Diagnostics",
+ "preparing_firmware": "Preparando firmware...",
+ "uploading": "Subiendo: {percentage}%",
+ "select_firmware_file": "O seleccione un archivo de firmware (.zip)",
+ "wifi_help": "La dirección IP de tu RNode en la red local.",
+ "run_diagnostics": "Diagnóstico",
"support": {
"serial": {
- "title": "USB serial is unavailable",
- "polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
+ "title": "USB serial no disponible",
+ "polyfill_not_loaded": "El polyfill de USB serial aún no se ha cargado.",
"android_webview_no_serial": "Android no admite Web Serial en esta vista. Use un navegador de escritorio o el flasher integrado.",
- "browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
- "android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
- "unknown": "USB serial cannot be initialised in this environment."
+ "browser_unsupported": "Este navegador no soporta Web Serial. Prueba con Chrome, Edge u otro navegador basado en Chromium.",
+ "android_use_chrome": "En Android, abrir esta página en Chrome permite usar Web Serial a través de WebUSB.",
+ "unknown": "USB serial no se puede inicializar en este entorno."
},
"bluetooth": {
- "title": "Bluetooth is unavailable",
+ "title": "Bluetooth no disponible",
"android_bridge_not_implemented": "Web Bluetooth no está disponible aquí. Use la configuración de Bluetooth del sistema o un navegador diferente.",
- "browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
- "insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
- "requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
- "unknown": "Bluetooth cannot be initialised in this environment."
+ "browser_unsupported": "Este navegador no soporta Web Bluetooth. Pruebe con Chrome o Edge.",
+ "insecure_context": "Web Bluetooth requiere un contexto seguro (HTTPS o localhost).",
+ "requires_https": "Abra el flasher a través de HTTPS o localhost para habilitar Bluetooth.",
+ "unknown": "Bluetooth no se puede inicializar en este entorno."
},
"actions": {
- "load_polyfill": "Load polyfill",
- "request_bluetooth": "Allow Bluetooth",
- "open_settings": "Open settings",
- "polyfill_loading": "Loading USB serial polyfill...",
- "bluetooth_requested": "Bluetooth permission requested."
+ "load_polyfill": "Cargar polyfill",
+ "request_bluetooth": "Permitir Bluetooth",
+ "open_settings": "Abrir configuración",
+ "polyfill_loading": "Cargando polyfill de USB serial...",
+ "bluetooth_requested": "Permiso de Bluetooth solicitado."
}
},
"diagnostics": {
- "title": "Device Diagnostics",
- "healthy": "Healthy",
- "needs_attention": "Needs attention",
- "issues_detected": "Issues detected",
+ "title": "Diagnóstico del dispositivo",
+ "healthy": "Saludable",
+ "needs_attention": "Requiere atención",
+ "issues_detected": "Problemas detectados",
"firmware_version": "Firmware",
- "platform": "Platform",
- "board": "Board",
- "provisioned": "Provisioned",
- "product": "Product",
- "model": "Model",
- "firmware_hash": "FW hash",
- "target_hash": "Target hash",
+ "platform": "Plataforma",
+ "board": "Placa",
+ "provisioned": "Aprovisionado",
+ "product": "Producto",
+ "model": "Modelo",
+ "firmware_hash": "Hash del FW",
+ "target_hash": "Hash objetivo",
"suggestions": {
- "not_provisioned": "EEPROM is not provisioned. Run step 3 (Provision EEPROM).",
- "firmware_hash_missing": "Firmware hash is missing. Run step 4 (Set Firmware Hash).",
- "firmware_hash_mismatch": "Firmware hash mismatch. Re-flash the firmware and re-run step 4.",
- "product_mismatch": "Selected product does not match the connected device.",
- "no_firmware_version": "Could not read firmware version. Try reconnecting the device.",
- "detect_failed": "Could not detect this RNode. Verify cable, port, and power.",
- "read_timeout": "Device did not respond in time. Try reconnecting or rebooting it."
+ "not_provisioned": "La EEPROM no está aprovisionada. Ejecute el paso 3 (Aprovisionar EEPROM).",
+ "firmware_hash_missing": "Falta el hash del firmware. Ejecute el paso 4 (Establecer hash del firmware).",
+ "firmware_hash_mismatch": "El hash del firmware no coincide. Vuelva a flashear el firmware y ejecute el paso 4 nuevamente.",
+ "product_mismatch": "El producto seleccionado no coincide con el dispositivo conectado.",
+ "no_firmware_version": "No se pudo leer la versión del firmware. Intente reconectar el dispositivo.",
+ "detect_failed": "No se pudo detectar este RNode. Verifique el cable, el puerto y la alimentación.",
+ "read_timeout": "El dispositivo no respondió a tiempo. Intente reconectarlo o reiniciarlo."
}
}
},
"micron_editor": {
- "title": "Micron Editor",
+ "title": "Editor de Micron",
"description": "Editar marca Micron con una vista previa en vivo.",
"editor": "Editor",
"preview": "Vista previa",
@@ -2446,13 +2446,13 @@
"edit": "Editar",
"view_preview": "Vista previa",
"placeholder": "Introduzca su marca Micron aquí...",
- "reset": "Reset",
+ "reset": "Restablecer",
"new_tab": "Nueva pestaña",
- "rename_tab": "Rename Tab",
+ "rename_tab": "Renombrar pestaña",
"confirm_reset": "¿Estás seguro de que quieres restablecer el editor? Todas tus fichas y contenido se perderán.",
"confirm_delete_tab": "¿Estás seguro de que quieres borrar esta pestaña?",
- "main_tab": "Main",
- "guide_tab": "NomadNet Guide",
+ "main_tab": "Principal",
+ "guide_tab": "Guía de NomadNet",
"parser_by": "Usando Micron Parser por",
"wasm_active": "Motor WASM activo (analizador rápido)",
"wasm_inactive": "Motor JS activo (analizador lento, haga clic para WASM)",
@@ -2464,7 +2464,7 @@
"publish_all_done": "Publicadas {published}/{total} pestañas en {server}"
},
"reticulum_config_editor": {
- "title": "Reticulum Config Editor",
+ "title": "Editor de configuración de Reticulum",
"description": "Edite el archivo de configuración central de Reticulum (RNS) dentro de MeshChatX. Reinicie RNS para que los cambios surtan efecto.",
"info": "Este es el archivo de configuración de Reticulum crudo. Ahorro no aplicará cambios hasta que se reinicia RNS.",
"loading": "Cargando config...",
@@ -2472,7 +2472,7 @@
"save": "Guardar",
"saving": "Salvando...",
"saved": "Config Reticulum salvado",
- "discard": "Discard",
+ "discard": "Descartar",
"unsaved": "Cambios no salvos",
"restore_defaults": "Restaurar defectos",
"restoring": "Restaurar defectos...",
@@ -2482,11 +2482,11 @@
"restart_required": "Reinicio requerido",
"restart_description": "Reticulum debe ser reiniciado para que sus cambios de configuración surtan efecto.",
"restart_now": "Reinicie RNS ahora",
- "restart_done": "Reticulum restarted",
- "failed_load": "Failed to load Reticulum config",
- "failed_save": "Failed to save Reticulum config",
- "failed_restore": "Failed to restore Reticulum config",
- "failed_restart": "Failed to restart Reticulum",
+ "restart_done": "Reticulum reiniciado",
+ "failed_load": "Error al cargar la configuración de Reticulum",
+ "failed_save": "Error al guardar la configuración de Reticulum",
+ "failed_restore": "Error al restaurar la configuración de Reticulum",
+ "failed_restart": "Error al reiniciar Reticulum",
"tips_title": "Consejos",
"tip_sections": "El config debe contener secciones [reticulum] y [interfaces].",
"tip_restart": "Utilice el botón Reiniciar RNS o la página Interfaces para aplicar cambios.",
@@ -2497,7 +2497,7 @@
"description": "Crear o escanear mensajes de papel LXMF codificados por QR."
},
"mesh_server": {
- "title": "Mesh Server",
+ "title": "Servidor Mesh",
"description": "Host Micron páginas y archivos para pares en la malla."
},
"rns_tunnel": {
@@ -2509,12 +2509,12 @@
"description": "Sincronización de archivos entre pares de malla (en desarrollo)."
},
"bots": {
- "title": "LXMFy Bots",
+ "title": "Bots LXMFy",
"description": "Simples bots LXMF (echo, notas, recordatorios) cuando se instala LXMFy."
}
},
"ping": {
- "title": "Ping Mesh Peers",
+ "title": "Hacer ping a pares de Mesh",
"description": "Sólo los destinos que expongan el tipo de aplicación de ping responderán.",
"destination_hash": "Destino Hash",
"timeout_seconds": "Ping Timeout (segundos)",
@@ -2524,11 +2524,11 @@
"drop_path": "Sendero de goteo",
"status": "Situación",
"running": "Corriendo",
- "idle": "Idle",
+ "idle": "Inactivo",
"last_rtt": "Último RTT",
"last_error": "Último error",
- "console_output": "Console Output",
- "streaming_responses": "Streaming seq responses in real time",
+ "console_output": "Salida de consola",
+ "streaming_responses": "Transmitiendo respuestas de secuencia en tiempo real",
"no_pings_yet": "Todavía no hay pings. Iniciar una ejecución para recopilar datos RTT.",
"invalid_hash": "Hash destino inválido!",
"timeout_must_be_number": "¡El tiempo debe ser un número!"
@@ -2553,7 +2553,7 @@
"invalid_hash": "Hash destino inválido!",
"provide_file_path": "Por favor, proporciona una ruta de archivo!",
"file_sent_successfully": "El archivo enviado con éxito. ID de transferencia:{id}",
- "failed_to_send": "Failed to send file",
+ "failed_to_send": "Error al enviar archivo",
"remote_file_path": "Sendero remoto de archivos",
"save_path_optional": "Sendero de Salvación (opcional)",
"save_path_placeholder": "Deja vacío para el directorio actual",
@@ -2568,8 +2568,8 @@
"stop_listening": "Deja de escuchar",
"listening_on": "Escuchando:",
"provide_allowed_hash": "Por favor, proporcione al menos un hash de identidad permitido!",
- "failed_to_start_listener": "Failed to start listener",
- "failed_to_stop_listener": "Failed to stop listener",
+ "failed_to_start_listener": "Error al iniciar el listener",
+ "failed_to_stop_listener": "Error al detener el listener",
"browse_file": "Navega",
"browse_folder": "Elija la carpeta",
"receive_folder": "Carpeta de archivos recibidos",
@@ -2585,57 +2585,57 @@
"web_save_path_prompt": "Introduzca la ruta de carpeta absoluta en la máquina que ejecuta MeshChat (servidor) donde se debe guardar el archivo trazado:"
},
"rnsh": {
- "remote_shell": "Remote shell",
- "usage_title": "Usage",
- "usage_hint": "Create connect or listen sessions, then manage them on the Sessions tab. Output streams live while MeshChatX is running.",
- "tab_sessions": "Sessions",
- "tab_connect": "Connect",
- "tab_listen": "Listen",
- "sessions": "Sessions",
- "refresh": "Refresh",
- "name": "Session name",
- "name_placeholder": "Ops shell",
- "listen_mode": "Listen",
- "destination_hash": "Destination hash",
+ "remote_shell": "Shell remoto",
+ "usage_title": "Uso",
+ "usage_hint": "Cree sesiones de conexión o escucha, luego adminístrelas en la pestaña Sesiones. Los flujos de salida permanecen activos mientras MeshChatX esté en ejecución.",
+ "tab_sessions": "Sesiones",
+ "tab_connect": "Conectar",
+ "tab_listen": "Escuchar",
+ "sessions": "Sesiones",
+ "refresh": "Actualizar",
+ "name": "Nombre de la sesión",
+ "name_placeholder": "Shell de operaciones",
+ "listen_mode": "Escuchar",
+ "destination_hash": "Hash de destino",
"destination_placeholder": "7a55144adf826958a9529a3bcf08b149",
- "allowed_hashes": "Allowed identity hashes",
- "allowed_hashes_placeholder": "One hash per line",
- "remote_command": "Remote command",
- "default_command": "Default command",
+ "allowed_hashes": "Hashes de identidad permitidos",
+ "allowed_hashes_placeholder": "Un hash por línea",
+ "remote_command": "Comando remoto",
+ "default_command": "Comando predeterminado",
"command_placeholder": "/bin/bash --login",
- "mirror_exit_code": "Mirror exit code (-m)",
- "no_id": "No local identity (-N)",
- "create_and_start": "Create and start",
- "session_output": "Session output",
- "no_command_yet": "No command started yet",
- "start": "Start",
- "stop": "Stop",
- "clear": "Clear",
- "remove": "Remove",
- "send_line": "Send",
- "command_input_placeholder": "Type command input...",
- "status_running": "Running",
- "status_stopped": "Stopped",
- "status_failed": "Failed",
- "no_sessions": "No sessions created yet.",
- "unnamed_session": "Unnamed session",
- "select_or_create_session": "Select or create a session to begin.",
- "no_output_yet": "No output yet.",
- "destination_required": "Destination hash is required for connect mode.",
- "session_created": "Session created",
- "session_started": "Session started",
- "session_stopped": "Session stopped",
- "session_removed": "Session removed",
- "output_cleared": "Output cleared",
- "title": "RNSH - Reticulum Remote Shell",
- "description": "Manage persistent rnsh sessions",
- "failed_to_load_sessions": "Failed to load RNSH sessions",
- "failed_to_create_session": "Failed to create RNSH session",
- "failed_to_start_session": "Failed to start RNSH session",
- "failed_to_stop_session": "Failed to stop RNSH session",
- "failed_to_remove_session": "Failed to remove RNSH session",
- "failed_to_clear_output": "Failed to clear RNSH output",
- "failed_to_send_input": "Failed to send RNSH input",
+ "mirror_exit_code": "Reflejar código de salida (-m)",
+ "no_id": "Sin identidad local (-N)",
+ "create_and_start": "Crear e iniciar",
+ "session_output": "Salida de la sesión",
+ "no_command_yet": "Aún no se ha iniciado ningún comando",
+ "start": "Iniciar",
+ "stop": "Detener",
+ "clear": "Limpiar",
+ "remove": "Eliminar",
+ "send_line": "Enviar",
+ "command_input_placeholder": "Escribe entrada de comando...",
+ "status_running": "Ejecutando",
+ "status_stopped": "Detenido",
+ "status_failed": "Fallido",
+ "no_sessions": "Aún no se han creado sesiones.",
+ "unnamed_session": "Sesión sin nombre",
+ "select_or_create_session": "Selecciona o crea una sesión para comenzar.",
+ "no_output_yet": "Aún no hay salida.",
+ "destination_required": "El hash de destino es obligatorio para el modo de conexión.",
+ "session_created": "Sesión creada",
+ "session_started": "Sesión iniciada",
+ "session_stopped": "Sesión detenida",
+ "session_removed": "Sesión eliminada",
+ "output_cleared": "Salida limpiada",
+ "title": "RNSH - Shell Remoto de Reticulum",
+ "description": "Gestionar sesiones persistentes de rnsh",
+ "failed_to_load_sessions": "Error al cargar las sesiones de RNSH",
+ "failed_to_create_session": "Error al crear la sesión de RNSH",
+ "failed_to_start_session": "Error al iniciar la sesión de RNSH",
+ "failed_to_stop_session": "Error al detener la sesión de RNSH",
+ "failed_to_remove_session": "Error al eliminar la sesión de RNSH",
+ "failed_to_clear_output": "Error al limpiar la salida de RNSH",
+ "failed_to_send_input": "Error al enviar la entrada de RNSH",
"listening_on": "Escuchando en",
"waiting_for_address": "Esperando la dirección del receptor...",
"copy_address": "Copiar",
@@ -2644,57 +2644,57 @@
"config_dir": "Directorio de configuración de Reticulum",
"config_dir_placeholder": "Por defecto, la configuración de Reticulum de la app",
"config_dir_hint": "Déjalo en blanco para compartir la instancia de Reticulum de MeshChatX. Anúlalo solo para usar un directorio de configuración de Reticulum independiente.",
- "tab_sessions_short": "Sessions",
- "tab_connect_short": "Connect",
- "tab_listen_short": "Listen",
- "fullscreen": "Full screen",
- "exit_fullscreen": "Exit full screen",
- "show_sessions": "Sessions",
- "hide_sessions": "Back to terminal"
+ "tab_sessions_short": "Sesiones",
+ "tab_connect_short": "Conectar",
+ "tab_listen_short": "Escuchar",
+ "fullscreen": "Pantalla completa",
+ "exit_fullscreen": "Salir de pantalla completa",
+ "show_sessions": "Sesiones",
+ "hide_sessions": "Volver al terminal"
},
"rnprobe": {
"network_diagnostics": "Diagnósticos de red",
- "title": "RNProbe - Destination Probe",
+ "title": "RNProbe - Sonda de destino",
"description": "Enviar sondas con tamaño configurable para medir RTT y entrega.",
"destination_hash": "Destino Hash",
"full_destination_name": "Nombre de destino completo",
- "probe_size_bytes": "Probe Size (bytes)",
+ "probe_size_bytes": "Tamaño de sonda (bytes)",
"number_of_probes": "Número de sondas",
"wait_between_probes": "Espera entre sondas (segundos)",
- "start_probe": "Start Probe",
+ "start_probe": "Iniciar sonda",
"stop": "Para.",
"clear_results": "Resultados claros",
"summary": "Resumen",
- "sent": "Sent",
+ "sent": "Enviado",
"delivered": "Entrega",
- "timeouts": "Timeouts",
- "failed": "Failed",
+ "timeouts": "Tiempos de espera",
+ "failed": "Falló",
"probe_results": "Resultados de sondeo",
"probe_responses_realtime": "Respuestas de sondeo en tiempo real",
"no_probes_yet": "Aún no hay sondas. Iniciar una sonda para probar la conectividad.",
"probe_number": "Sonda{number}",
"bytes": "bytes",
- "hops": "Hops",
+ "hops": "Saltos",
"rtt": "RTT",
"rssi": "RSSI",
"snr": "SNR",
"quality": "Calidad",
- "timeout": "Timeout",
+ "timeout": "Tiempo de espera",
"invalid_hash": "Hash destino inválido!",
"provide_full_name": "Por favor, proporcione un nombre de destino completo!",
- "failed_to_probe": "Failed to probe destination"
+ "failed_to_probe": "Error al sondear destino"
},
"rnstatus": {
"network_diagnostics": "Diagnósticos de red",
"title": "RNStatus - Estado de la red",
"description": "Estadísticas de interés y estado de enlace de su instancia RNS.",
- "refresh": "Refresh",
- "include_link_stats": "Include Link Stats",
+ "refresh": "Actualizar",
+ "include_link_stats": "Incluir estadísticas de enlace",
"sort_by": "Ordenar por:",
"none": "Ninguno",
- "bitrate": "Bitrate",
- "rx_bytes": "RX Bytes",
- "tx_bytes": "TX Bytes",
+ "bitrate": "Tasa de bits",
+ "rx_bytes": "Bytes RX",
+ "tx_bytes": "Bytes TX",
"total_traffic": "Total de tráfico",
"announces": "Anuncios",
"active_links": "Enlaces activos:{count}",
@@ -2704,7 +2704,7 @@
"tx_packets": "Paquetes TX",
"clients": "Clientes",
"peers_reachable": "accesible",
- "noise_floor": "Noise Floor",
+ "noise_floor": "Piso de ruido",
"interference": "Interferencias",
"cpu_load": "Carga CPU",
"cpu_temp": "Temporada de CPU",
@@ -2722,7 +2722,7 @@
"description": "Traducir texto a través de un servidor LibreTranslate o Argos Traducir local.",
"argos_translate": "Argos Traducir",
"libretranslate": "LibreTranslate",
- "api_server": "LibreTranslate API Server",
+ "api_server": "Servidor API de LibreTranslate",
"api_server_description": "Introduzca la URL base de su servidor LibreTranslate (por ejemplo, http://localhost:5000)",
"api_key_optional": "Clave API de LibreTranslate (opcional)",
"api_key_placeholder": "Deje vacío a menos que su proveedor la exija",
@@ -2744,7 +2744,7 @@
"text_to_translate": "Texto para Traducir",
"enter_text_placeholder": "Escriba texto para traducir...",
"translate": "Traducir",
- "swap": "Swap",
+ "swap": "Intercambiar",
"clear": "Despejado",
"translation": "Traducción",
"source": "Fuente",
@@ -2760,11 +2760,11 @@
},
"call": {
"phone": "Teléfono",
- "voicemail": "Voicemail",
+ "voicemail": "Buzón de voz",
"settings": "Ajustes",
"unknown": "Desconocido",
- "call_ended": "Call Ended",
- "call_declined": "Call Declined",
+ "call_ended": "Llamada finalizada",
+ "call_declined": "Llamada rechazada",
"initiation": "Iniciando...",
"send_to_voicemail": "Enviar a Voicemail",
"incoming_call": "Llamada entrante...",
@@ -2778,20 +2778,20 @@
"connected": "Conectado",
"accept": "Aceptar",
"decline": "Declin",
- "hangup": "Hangup",
+ "hangup": "Colgar",
"answer_call": "Respuesta",
- "decline_call": "Decline Call",
- "hangup_call": "Hangup Call",
- "mute_mic": "Mute Mic",
- "unmute_mic": "Unmute Mic",
- "mute_speaker": "Mute Speaker",
- "unmute_speaker": "Unmute Speaker",
+ "decline_call": "Rechazar llamada",
+ "hangup_call": "Colgar llamada",
+ "mute_mic": "Silenciar micrófono",
+ "unmute_mic": "Activar micrófono",
+ "mute_speaker": "Silenciar altavoz",
+ "unmute_speaker": "Activar altavoz",
"telephone": "Teléfono",
"enter_identity_hash_to_call": "Introduzca una identidad a llamar.",
"identity_hash": "Identidad Hash",
"call_history": "Historia de llamadas",
- "call_back": "Call Back",
- "no_voicemails": "No Voicemails",
+ "call_back": "Devolver llamada",
+ "no_voicemails": "Sin mensajes de voz",
"voicemails_will_appear_here": "Cuando la gente te deje mensajes, aparecerán aquí.",
"voicemail_inbox": "buzón de voz",
"messages": "Mensajes",
@@ -2804,17 +2804,17 @@
"greeting_message": "Mensaje de salud",
"enter_greeting_text": "Escribe texto de saludo...",
"greeting_text_description": "Este texto se convertirá en discurso usando eSpeak NG.",
- "tts_speed": "TTS Speed",
- "tts_pitch": "TTS Pitch",
- "tts_voice": "TTS Voice",
- "tts_word_gap": "TTS Word Gap",
+ "tts_speed": "Velocidad de TTS",
+ "tts_pitch": "Tono de TTS",
+ "tts_voice": "Voz de TTS",
+ "tts_word_gap": "Espacio entre palabras de TTS",
"save_and_generate": "Guardar &quot; Generar",
"generating": "Generando...",
- "preview_greeting": "Preview Greeting",
- "stop_preview": "Stop Preview",
+ "preview_greeting": "Vista previa del saludo",
+ "stop_preview": "Detener vista previa",
"answer_delay_seconds": "Respuesta Dilatación (s)",
- "max_recording_seconds": "Max Recording (s)",
- "recording_voicemail": "Recording Voicemail",
+ "max_recording_seconds": "Grabación máxima (s)",
+ "recording_voicemail": "Grabando mensaje de voz",
"call_status": "Estado de la llamada",
"call_recording": "Grabador de llamadas",
"call_recording_description": "Llamadas de voz grabadas al almacenamiento",
@@ -2824,19 +2824,19 @@
"local_tx": "Local (TX)",
"download_rx": "Descargar RX",
"download_tx": "Descargar TX",
- "minimize": "Minimize",
- "active": "Active",
+ "minimize": "Minimizar",
+ "active": "Activa",
"default_quality": "Calidad predeterminada",
"active_call": "Llamada activa",
"status": "Situación",
- "failed_to_answer_call": "Failed to answer call",
- "failed_to_hangup_call": "Failed to hangup call",
+ "failed_to_answer_call": "Error al responder la llamada",
+ "failed_to_hangup_call": "Error al colgar la llamada",
"failed_to_toggle_microphone": "Failed toggle micrófono",
"failed_to_toggle_speaker": "Failed toggle altavoz",
- "failed_to_switch_audio_profile": "Failed to switch audio profile",
- "failed_to_initiate_call": "Failed to initiate call",
+ "failed_to_switch_audio_profile": "Error al cambiar el perfil de audio",
+ "failed_to_initiate_call": "Error al iniciar la llamada",
"enter_identity_hash_to_call_error": "Introduzca una identidad para llamar",
- "failed_to_save_settings": "Failed to save settings",
+ "failed_to_save_settings": "Error al guardar la configuración",
"do_not_disturb": "No te molestes",
"load_more": "Carga más",
"go_to_phone_page": "Ir a la página de teléfono",
@@ -2847,8 +2847,8 @@
"failed_to_generate_greeting": "Failed to generate saluding",
"no_greeting_audio_found": "No hay audio de saludo encontrado. Por favor, genera uno primero.",
"voicemail_deleted": "Correo de voz eliminado",
- "failed_to_delete_voicemail": "Failed to delete voicemail",
- "ringtone": "Ringtone",
+ "failed_to_delete_voicemail": "Error al eliminar mensaje de voz",
+ "ringtone": "Tono de llamada",
"ringtone_settings": "Ajustes de Ringtone",
"enable_custom_ringtone": "Activar Ringtone personalizado",
"enable_custom_ringtone_description": "Juega un archivo de audio personalizado para todas las llamadas entrantes",
@@ -2857,11 +2857,11 @@
"no_custom_ringtone_uploaded": "No hay tono personalizado subido",
"supports_audio_formats": "Admite MP3, OGG, WAV, M4A, FLAC. Se convertirá en Opus.",
"preview_ringtone": "Avance Ringtone",
- "remove_ringtone": "Remove Ringtone",
+ "remove_ringtone": "Eliminar tono de llamada",
"ringtone_uploaded_successfully": "Ringtone subió con éxito",
- "failed_to_upload_ringtone": "Failed to upload ringtone",
+ "failed_to_upload_ringtone": "Error al subir el tono de llamada",
"ringtone_deleted": "Ringtone eliminado",
- "failed_to_delete_ringtone": "Failed to delete ringtone",
+ "failed_to_delete_ringtone": "Error al eliminar tono",
"no_ringtone_audio_found": "No se ha encontrado audio. Por favor, suba uno primero.",
"ringtone_volume": "Volumen Ringtone",
"default_ringtone": "Tono de llamada predeterminado",
@@ -2873,44 +2873,44 @@
"contact_name": "Nombre de contacto",
"preferred_ringtone": "Preferente Ringtone",
"default_global_setting": "Predeterminado (Configuración global)",
- "uploaded_ringtones": "Uploaded Ringtones",
+ "uploaded_ringtones": "Tonos de llamada subidos",
"save_contact": "Guardar contacto",
"primary_ringtone_set": "Conjunto de tono primario",
- "failed_to_set_primary_ringtone": "Failed to set primary ringtone",
- "failed_to_update_ringtone_name": "Failed to update ringtone name",
- "failed_to_play_ringtone": "Failed to play ringtone",
- "failed_to_play_voicemail": "Failed to play voicemail",
+ "failed_to_set_primary_ringtone": "Error al establecer el tono de llamada principal",
+ "failed_to_update_ringtone_name": "Error al actualizar el nombre del tono de llamada",
+ "failed_to_play_ringtone": "Error al reproducir el tono",
+ "failed_to_play_voicemail": "Error al reproducir el mensaje de voz",
"web_audio_not_available": "Audio web no disponible",
"no_audio_input_found": "No hay dispositivo de audio de entrada encontrado. Revise el micrófono y los permisos.",
"microphone_permission_denied": "Se niega el permiso de micrófono. Permitir acceso e intentarlo de nuevo.",
- "failed_to_update_dnd": "Failed to update Do Not Disturb status",
- "failed_to_update_call_settings": "Failed to update call settings",
- "failed_to_update_recording_status": "Failed to update call recording status",
+ "failed_to_update_dnd": "Error al actualizar el estado de No Molestar",
+ "failed_to_update_call_settings": "Error al actualizar la configuración de llamada",
+ "failed_to_update_recording_status": "Error al actualizar el estado de grabación de llamada",
"call_history_cleared": "Historial de llamada despejado",
- "failed_to_clear_call_history": "Failed to clear call history",
+ "failed_to_clear_call_history": "Error al borrar el historial de llamadas",
"identity_banished": "Identidad desterrada",
- "failed_to_banish_identity": "Failed to banish identity",
+ "failed_to_banish_identity": "Error al desterrar identidad",
"name_and_hash_required": "Nombre e identidad necesarios",
"contact_updated": "Contacto actualizado",
"contact_added": "Contacto añadido",
"contact_deleted": "Contacto eliminado",
- "failed_to_delete_contact": "Failed to delete contact",
+ "failed_to_delete_contact": "Error al eliminar contacto",
"hash_copied": "Hash copiado al portapapeles",
- "failed_to_copy_hash": "Failed to copy hash",
+ "failed_to_copy_hash": "Error al copiar el hash",
"greeting_uploaded_successfully": "Saludo subido con éxito",
"greeting_deleted": "Saludos eliminados",
"failed_to_delete_greeting": "Fallado para eliminar el saludo",
"failed_to_start_recording_greeting": "Fallado para empezar a grabar el saludo",
"greeting_recorded_from_mic": "Saludo grabado en micro",
"failed_to_stop_recording_greeting": "Failed to stop recording saluding",
- "failed_to_load_recording": "Failed to load recording audio",
+ "failed_to_load_recording": "Error al cargar el audio de la grabación",
"recording_deleted": "Grabación eliminada",
- "failed_to_delete_recording": "Failed to delete recording",
+ "failed_to_delete_recording": "Error al eliminar grabación",
"call_sent_to_voicemail": "Llamada enviada al buzón de voz",
- "failed_to_send_to_voicemail": "Failed to send call to voicemail",
+ "failed_to_send_to_voicemail": "Error al enviar la llamada al buzón de voz",
"failed_load_audio_edit": "No se puede cargar audio para editar",
"ringtone_saved": "Ringtone se salvó con éxito",
- "failed_save_ringtone": "Failed to save edited ringtone"
+ "failed_save_ringtone": "Error al guardar el tono editado"
},
"contacts": {
"title": "Contactos",
@@ -2923,17 +2923,17 @@
"contact_name_optional": "Nombre de contacto (opcional)",
"contact_name_placeholder": "por ejemplo, Nodo de Campo",
"hash_or_uri": "LXMF Hash o URI",
- "hash_or_uri_placeholder": "32-char hash, lxmf://..., or lxma://...",
- "paste": "Paste",
- "failed_load_contacts": "Failed to load contacts",
+ "hash_or_uri_placeholder": "hash de 32 caracteres, lxmf://... o lxma://...",
+ "paste": "Pegar",
+ "failed_load_contacts": "No se pudieron cargar los contactos",
"invalid_contact_input": "Invalida entrada. Use a 32-char hash or lxma:// URI.",
"contact_already_exists": "El contacto ya existe",
"contact_added": "Contacto añadido",
- "failed_add_contact": "Failed to add contact",
+ "failed_add_contact": "No se pudo agregar el contacto",
"remove_contact": "Quitar contacto",
"remove_contact_confirm": "¿Retirar este contacto?",
"contact_removed": "Contacto eliminado",
- "failed_remove_contact": "Failed to remove contact",
+ "failed_remove_contact": "No se pudo eliminar el contacto",
"share_contact": "Compartir contacto URI",
"copy_contact_uri": "Copia de contacto URI",
"contact_uri_copied": "Contacto URI copiado a portapapeles",
@@ -2941,20 +2941,20 @@
"share_my_identity": "Compartir Mi identidad",
"identity_uri_copied": "Identidad URI copiado a portapapeles",
"share": "Compartir",
- "scan_qr": "Scan QR Code",
+ "scan_qr": "Escanear código QR",
"scanner_hint": "Marcar la cámara en un código QR de identidad.",
"camera_not_supported": "El escaneado de cámara QR no es compatible con este navegador.",
"camera_permission_denied": "Se niega el permiso de cámara. Por favor, permita el acceso a la cámara.",
"camera_not_found": "No hay dispositivo de cámara encontrado.",
- "camera_failed": "Failed to start camera scanner.",
+ "camera_failed": "No se pudo iniciar el escáner de cámara.",
"qr_scanned": "Código QR escaneado",
"importing_lxma": "Importando contacto LXMA...",
"send_message": "Mensaje",
- "call_contact": "Call",
+ "call_contact": "Llamar",
"export_contacts": "Exportación",
"import_contacts": "Importación",
"export_success": "Contactos exportados",
- "export_failed": "Failed to export contacts",
+ "export_failed": "No se pudieron exportar los contactos",
"import_success": "Importado{added}contacto(s)",
"import_failed": "No importar contactos",
"import_modal_title": "Contactos de importación",
@@ -2962,7 +2962,7 @@
"edit_contact": "Editar contacto",
"enter_contact_name": "Introduzca el nombre de contacto",
"contact_updated": "Contacto actualizado",
- "failed_update_contact": "Failed to update contact"
+ "failed_update_contact": "No se pudo actualizar el contacto"
},
"tutorial": {
"title": "Comienzo",
@@ -2987,7 +2987,7 @@
"tools": "Funciones integradas",
"tools_desc": "Micron Editor, NomadNet, Herramientas RNS, Docs.",
"tools_desc_page": "Editor de micrones, nodos NomadNet, herramientas RNS y documentación integrada.",
- "archiver": "Archiver",
+ "archiver": "Archivador",
"archiver_desc": "Archivo de página manual y automatizado.",
"archiver_desc_page": "Herramientas de archivo de página manuales y automatizadas para la navegación sin conexión.",
"banishment": "Destierro",
@@ -2995,7 +2995,7 @@
"palette": "Paleta de mando + Keybindings",
"palette_desc": "Navegar todo al instante y personalizar atajos.",
"palette_desc_page": "Navegue toda la aplicación y personalice su flujo de trabajo con atajos instantáneos.",
- "i18n": "i18n Support",
+ "i18n": "Soporte i18n",
"i18n_desc": "Disponible en inglés, alemán, italiano, ruso, holandés, francés y español.",
"i18n_desc_page": "Soporte de internacionalización completo para inglés, alemán, italiano, ruso, holandés, francés y español.",
"more_features": "+ muchas más características!",
@@ -3019,7 +3019,7 @@
"suggested_networks": "Redes públicas sugeridas",
"suggested_relays": "Relés sugeridos",
"use": "Uso",
- "online": "Online",
+ "online": "En línea",
"custom_interfaces": "Interfaces personalizadas",
"custom_interfaces_desc": "¿Quieres añadir una interfaz a medida? Diríjase a la página Interfaces para configurar una conexión personalizada.",
"custom_interfaces_desc_page": "Para cualquier relé privado o hardware que usted maneja, añádelos a través de la página de Interfaces dedicadas.",
@@ -3031,20 +3031,20 @@
"documentation": "Documentación",
"documentation_desc": "Lea la documentación oficial MeshChatX y Reticulum.",
"documentation_desc_page": "Guías para MeshChatX y la pila Reticulum.",
- "meshchatx_docs": "MeshChatX Docs",
- "reticulum_docs": "Reticulum Docs",
+ "meshchatx_docs": "Documentación de MeshChatX",
+ "reticulum_docs": "Documentación de Reticulum",
"read_meshchatx_docs": "Lea MeshChatX Docs",
- "reticulum_manual": "Reticulum Network Manual",
- "micron_editor": "Micron Editor",
+ "reticulum_manual": "Manual de red Reticulum",
+ "micron_editor": "Editor Micron",
"micron_editor_desc": "Echa un vistazo a Micron Editor para una guía en la creación de páginas nativas de malla.",
"micron_editor_desc_page": "Aprende a crear páginas nativas de malla y contenidos interactivos usando el lenguaje de marcado Micron.",
- "open_micron_editor": "Open Micron Editor",
- "open_mesh_server": "Open Mesh Server",
- "open_identities": "Identities",
+ "open_micron_editor": "Abrir Editor Micron",
+ "open_mesh_server": "Abrir servidor Mesh",
+ "open_identities": "Identidades",
"identities_card_title": "Varias identidades",
"identities_card_desc": "Cambia de persona, exporta claves y mantén perfiles separados en un solo equipo.",
"identities_card_desc_page": "Gestiona varias identidades Reticulum en una instalación: crea o elimina personas, cambia quién eres en la malla y exporta claves cuando las necesites.",
- "paper_messages": "Explore NomadNet Nodes",
+ "paper_messages": "Explorar nodos NomadNet",
"paper_messages_desc": "Hojee páginas y servicios nómadas.",
"send_messages": "Enviar mensajes",
"send_messages_desc": "Iniciar una conversación segura.",
@@ -3059,11 +3059,11 @@
"restart_required": "Reticulum reiniciado",
"restart_desc_page": "Reticulum fue cargado con tu nueva configuración. No se requiere reinicio manual para uso normal.",
"back": "Atrás",
- "skip": "Skip",
+ "skip": "Saltar",
"next": "Siguiente",
- "restart_start": "Start MeshChatX",
+ "restart_start": "Iniciar MeshChatX",
"finish_setup": "Acabado de configuración",
- "skip_setup": "Skip Setup",
+ "skip_setup": "Saltar configuración",
"continue": "Continuar",
"skip_confirm": "¿Seguro que quieres saltarte la configuración? Necesitarás agregar interfaces manualmente más tarde.",
"discovery_question": "¿Quieres utilizar la interfaz comunitaria descubriendo y autoconectando?",
@@ -3071,15 +3071,15 @@
"yes": "Sí, utiliza el descubrimiento",
"no": "No, configuración manual",
"discovery_enabled": "Se ha permitido el descubrimiento comunitario",
- "failed_enable_discovery": "Failed to enable discovery",
+ "failed_enable_discovery": "Error al habilitar el descubrimiento",
"mode_discovery_title": "Auto-descubrimiento",
"mode_discovery_desc": "Encontrar y conectarse a los nodos de Reticulum cercanos y accesibles a Internet. Usted elegirá uno o más nodos de arranque después.",
- "mode_local_title": "Local Network Only",
+ "mode_local_title": "Solo red local",
"mode_local_desc": "Use Reticulum en su LAN/Wi-Fi solamente. Añade un AutoInterface para la malla local de cero contacto.",
"mode_manual_title": "Configuración manual",
"mode_manual_desc": "Saltar y configurar interfaces desde la página Interfaces más tarde.",
"mode_change_later": "Puede cambiar la configuración de conexión en cualquier momento desde la configuración de Reticulum.",
- "bootstrap_title": "Pick Bootstrap Nodes",
+ "bootstrap_title": "Seleccionar Nodos Bootstrap",
"bootstrap_desc": "Los nodos de bootstrap dan a descubrimiento un punto de partida. Seleccione uno o más, luego continúe.",
"bootstrap_pick_random_tcp": "Elegir 3 nodos TCP aleatorios",
"bootstrap_pick_random_none": "No hay presets TCP comunitarios adecuados. Actualice los presets o elija a mano (el azar solo usa la lista comunitaria, no descubiertos).",
@@ -3094,20 +3094,20 @@
"bootstrap_discovered": "Nodos descubiertos",
"bootstrap_community": "Nodos comunitarios",
"bootstrap_selected": "{count}seleccionado",
- "bootstrap_skip": "Skip for now",
+ "bootstrap_skip": "Saltar por ahora",
"bootstrap_confirm": "Añadir RNS seleccionado y reiniciar",
"bootstrap_added": "Interfaz de arranque de{count}(s)",
"bootstrap_pick_at_least_one": "Elija al menos un nodo de arranque",
- "failed_add_bootstrap": "Failed to add bootstrap interface",
- "failed_add_bootstrap_none": "No bootstrap interfaces were added. Check your selection and try again.",
- "failed_save_bootstrap_only": "Failed to save bootstrap-only preference",
- "failed_enable_propagation": "Failed to enable auto-propagation",
- "connect_mode_required": "Choose a connection mode to continue",
+ "failed_add_bootstrap": "Error al agregar interfaz bootstrap",
+ "failed_add_bootstrap_none": "No se agregaron interfaces bootstrap. Revisa tu selección e inténtalo de nuevo.",
+ "failed_save_bootstrap_only": "Error al guardar la preferencia de solo bootstrap",
+ "failed_enable_propagation": "Error al habilitar la propagación automática",
+ "connect_mode_required": "Elige un modo de conexión para continuar",
"local_added": "Autointerface local añadido",
- "failed_add_local": "Failed to add local interface",
- "failed_reload_rns": "Failed to restart Reticulum",
+ "failed_add_local": "Error al agregar interfaz local",
+ "failed_reload_rns": "Error al reiniciar Reticulum",
"ready_finished": "Reticulum ha sido reiniciado con su nueva configuración",
- "propagation": "Propagation Node",
+ "propagation": "Nodo de propagación",
"propagation_question": "¿Quieres autoconfigurar el modo de propagación?",
"propagation_desc": "Los ganglios de propagación actúan como un buzón de correo siempre sobre sus mensajes. Almacenan los mensajes sin conexión y los entregan tan pronto como vuelva a conectarse a la red.",
"propagation_auto": "Auto-configure encontrará y conectará automáticamente al nodo de propagación más fiable disponible. Si no hay nodo disponible actualmente, MeshChatX esperará a que aparezca. Hasta entonces, la sincronización de mensajes fuera de línea no estará disponible.",
@@ -3123,11 +3123,11 @@
"group_actions": "Acciones",
"group_recent": "Pegados recientes",
"group_contacts": "Contactos",
- "footer_navigate": "Navigate",
+ "footer_navigate": "Navegar",
"footer_select": "Seleccione",
"nav_messages": "Mensajes",
"nav_messages_desc": "Conversaciones y caja de entrada LXMF",
- "nav_nomad": "Nomad Network",
+ "nav_nomad": "Red Nómada",
"nav_nomad_desc": "Hojee páginas y servicios nómadas",
"nav_map": "Mapa",
"nav_map_desc": "Mapa geográfico y capas",
@@ -3151,19 +3151,19 @@
"nav_rnpath_trace_desc": "Lista de saltos hacia un hash",
"nav_translator": "Traductor",
"nav_translator_desc": "Traducir texto del mensaje",
- "nav_forwarder": "Forwarder",
- "nav_forwarder_desc": "LXMF forwarding rules",
+ "nav_forwarder": "Reenviador",
+ "nav_forwarder_desc": "Reglas de reenvío de LXMF",
"nav_documentation": "Documentación",
"nav_documentation_desc": "Manuales de línea",
- "nav_repository_server": "Repository server",
+ "nav_repository_server": "Servidor de repositorio",
"nav_repository_server_desc": "Ruedas MeshChatX, paquetes Reticulum y sus archivos por HTTP",
- "nav_micron_editor": "Micron Editor",
+ "nav_micron_editor": "Editor de Micron",
"nav_micron_editor_desc": "Editar marca Micron",
- "nav_reticulum_config_editor": "Reticulum Config Editor",
+ "nav_reticulum_config_editor": "Editor de configuración de Reticulum",
"nav_reticulum_config_editor_desc": "Editar el archivo de configuración de Reticulum crudo",
- "nav_rnode_flasher": "RNode Flasher",
+ "nav_rnode_flasher": "Programador de RNode",
"nav_rnode_flasher_desc": "Actualización del firmware del dispositivo",
- "nav_debug_logs": "Debug Logs",
+ "nav_debug_logs": "Registros de depuración",
"nav_debug_logs_desc": "Registros de aplicación y acceso",
"action_sync": "Mensajes sincronizados",
"action_sync_desc": "Sincronización con su nodo de propagación",
@@ -3356,20 +3356,20 @@
"presence_connection": "{count} eventos de conexión"
},
"android_storage": {
- "setup_title": "Choose where MeshChatX stores data",
- "setup_desc": "File-manager storage is recommended. You can browse and back up your identity and messages under Android/data/com.meshchatx/files/. The app restarts when you change this during setup.",
- "setup_external_title": "File-manager storage (recommended)",
- "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — visible in many file managers.",
- "setup_internal_title": "Private app storage",
- "setup_internal_desc": "Hidden from file managers; only this app can access it.",
- "setup_continue": "Continue",
- "upgrade_title": "Move data to file-manager storage?",
- "upgrade_desc": "Your MeshChatX data is in private app storage. Copy it to the file-manager folder so you can browse and back up files, then restart the app.",
- "upgrade_copy": "Copy and restart",
- "upgrade_stay_internal": "Stay on private storage",
- "working": "Preparing…",
- "copy_restart_hint": "Copy scheduled. Closing the app — open MeshChatX again to finish.",
- "restart_to_apply": "Restart the app to apply your storage choice.",
- "failed": "Could not update storage location."
+ "setup_title": "Elige dónde almacena datos MeshChatX",
+ "setup_desc": "Se recomienda el almacenamiento del administrador de archivos. Puedes explorar y hacer copias de seguridad de tu identidad y mensajes en Android/data/com.meshchatx/files/. La aplicación se reinicia al cambiar esto durante la configuración.",
+ "setup_external_title": "Almacenamiento del administrador de archivos (recomendado)",
+ "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — visible en muchos administradores de archivos.",
+ "setup_internal_title": "Almacenamiento privado de la aplicación",
+ "setup_internal_desc": "Oculto de los administradores de archivos; solo esta aplicación puede acceder.",
+ "setup_continue": "Continuar",
+ "upgrade_title": "¿Mover datos al almacenamiento del administrador de archivos?",
+ "upgrade_desc": "Tus datos de MeshChatX están en el almacenamiento privado de la aplicación. Cópialos a la carpeta del administrador de archivos para poder explorar y hacer copias de seguridad, luego reinicia la aplicación.",
+ "upgrade_copy": "Copiar y reiniciar",
+ "upgrade_stay_internal": "Permanecer en almacenamiento privado",
+ "working": "Preparando…",
+ "copy_restart_hint": "Copia programada. Cierra la aplicación — abre MeshChatX de nuevo para finalizar.",
+ "restart_to_apply": "Reinicia la aplicación para aplicar tu elección de almacenamiento.",
+ "failed": "No se pudo actualizar la ubicación de almacenamiento."
}
}

diff --git a/meshchatx/src/frontend/locales/fi.json b/meshchatx/src/frontend/locales/fi.json
index a8c33a35..da38ff5e 100644
--- a/meshchatx/src/frontend/locales/fi.json
+++ b/meshchatx/src/frontend/locales/fi.json
@@ -226,14 +226,14 @@
"auto_select_pending": "Levityssolmua ei vielä asetettu. Sovellus asettaa solmun, kun sellainen tulee saataville.",
"incoming_message_size": "Saapuvan viestin koko",
"incoming_message_size_description": "Suoraan saapuvan LXMF-viestin suurin sallittu koko.",
- "incoming_message_size_1mb": "1 MB",
- "incoming_message_size_10mb": "10 MB",
- "incoming_message_size_25mb": "25 MB",
- "incoming_message_size_50mb": "50 MB",
- "incoming_message_size_1gb": "1 GB",
+ "incoming_message_size_1mb": "1 Mt",
+ "incoming_message_size_10mb": "10 Mt",
+ "incoming_message_size_25mb": "25 Mt",
+ "incoming_message_size_50mb": "50 Mt",
+ "incoming_message_size_1gb": "1 Gt",
"incoming_message_size_custom": "Mukautettu",
- "incoming_message_size_unit_mb": "MB",
- "incoming_message_size_unit_gb": "GB",
+ "incoming_message_size_unit_mb": "Mt",
+ "incoming_message_size_unit_gb": "Gt",
"auto_sync_interval": "Automaattisen synkronoinnin väli",
"last_synced": "Viimeisin synkronointi {time} sitten.",
"last_synced_never": "Viimeisin synkronointi: ei koskaan.",
@@ -322,7 +322,7 @@
"translator": "Kääntäjä",
"translator_enabled": "Kytke kääntäjä päälle",
"translator_description": "Kytke kääntäjä päälle keskusteluissa.",
- "libretranslate_url": "LibreTranslate URL",
+ "libretranslate_url": "LibreTranslate-URL",
"libretranslate_url_description": "URL LibreTranslate API:lle.",
"system": "Järjestelmä",
"reticulum_stack": "Reticulum-pino",
@@ -404,7 +404,7 @@
"location": "Sijainti",
"location_source": "Sijainnin lähde",
"location_source_disabled": "Poissa käytöstä",
- "location_source_disabled_desc": "Location sharing is turned off. Choose automatic or manual to share your coordinates.",
+ "location_source_disabled_desc": "Sijainnin jakaminen on pois päältä. Valitse automaattinen tai manuaalinen jakaaksesi koordinaattisi.",
"location_source_browser": "Automaattinen (selain)",
"location_source_manual": "Käsin",
"location_source_browser_desc": "Käyttää verkkoselaimen sijaintipalvelua. Huomaa: työpöytäsovelluksessa tämä voi käyttää Google-palveluja.",
@@ -424,34 +424,34 @@
"telemetry_trust_revoke": "Poista käyttötietojen luottamus",
"telemetry_trust_grant": "Luota käyttötietojen välitystä varten",
"location_manage_desc": "Hallinnoi sijainnin jakamisen asetuksia.",
- "desktop_tray_enabled": "System tray integration",
- "desktop_tray_enabled_description": "Keep a tray icon so MeshChatX can hide to the background instead of quitting.",
- "desktop_close_behavior": "When closing the window",
- "desktop_close_behavior_description": "Choose whether closing the window quits, hides to the tray/taskbar, or asks each time.",
- "desktop_close_behavior_ask": "Ask every time",
- "desktop_close_behavior_quit": "Quit application",
- "desktop_close_behavior_background": "Keep running in background",
- "desktop_close_behavior_background_no_tray": "Minimize to taskbar",
- "share_reticulum_instance": "Share Reticulum Instance",
- "share_reticulum_instance_description": "Make this MeshChatX Reticulum instance available to other local programs (Sideband-style shared instance). Other apps can use connectivity without Transport enabled.",
- "obfuscate_hops": "Obfuscate Hops",
- "obfuscate_hops_description": "When enabled, Reticulum applies a random local hop delta (RNS local_hops_delta) so outbound traffic does not advertise a true zero-hop origin to the wider mesh.",
- "respond_to_probes": "Respond to Probes",
- "respond_to_probes_description": "Allow this instance to answer Reticulum probe requests from the network.",
- "enable_remote_management": "Enable Remote Management",
- "enable_remote_management_description": "Allow remote management of this Reticulum instance when configured in the RNS config.",
- "shared_instance_type": "Shared Instance Type",
- "shared_instance_type_default": "Platform default",
- "shared_instance_type_description": "Use TCP when domain sockets are unavailable (common on Android). Leave default otherwise.",
- "instance_name": "Instance Name",
- "instance_name_description": "Isolate multiple shared instances on one system. Default is usually fine.",
- "rpc_config": "RPC Access",
- "rpc_config_description": "Copy these lines into another program's [reticulum] section for full shared-instance RPC access (management, interface status, path info).",
- "rpc_config_unavailable": "RPC key is not available yet. Start Reticulum as a shared instance first.",
- "rpc_config_copied": "RPC config copied to clipboard",
- "copy_rpc_config": "Copy RPC Config",
- "connected_to_shared_instance": "This MeshChatX process is attached to an external shared Reticulum instance. Edit that instance's config to change share/RPC settings.",
- "copy_failed": "Failed to copy to clipboard",
+ "desktop_tray_enabled": "Järjestelmälokeron integraatio",
+ "desktop_tray_enabled_description": "Pidä kuvake lokerossa, jotta MeshChatX voi piiloutua taustalle sulkemisen sijaan.",
+ "desktop_close_behavior": "Kun ikkuna suljetaan",
+ "desktop_close_behavior_description": "Valitse, sulkeutuuko ikkuna, piiloutuuko se lokeroon/tehtäväpalkkiin vai kysytäänkö joka kerta.",
+ "desktop_close_behavior_ask": "Kysy aina",
+ "desktop_close_behavior_quit": "Sulje sovellus",
+ "desktop_close_behavior_background": "Pidä käynnissä taustalla",
+ "desktop_close_behavior_background_no_tray": "Pienennä tehtäväpalkkiin",
+ "share_reticulum_instance": "Jaa Reticulum-instanssi",
+ "share_reticulum_instance_description": "Tee tästä MeshChatX Reticulum -instanssista saatavilla muille paikallisille ohjelmille (Sideband-tyylinen jaettu instanssi). Muut sovellukset voivat käyttää yhteyttä ilman Transportia.",
+ "obfuscate_hops": "Peitä hypyt",
+ "obfuscate_hops_description": "Kun käytössä, Reticulum soveltaa satunnaista paikallista hyppyeroa (RNS local_hops_delta), jotta lähtevä liikenne ei mainosta todellista nollahyppyalkuperää laajemmalle verkkoon.",
+ "respond_to_probes": "Vastaa koettimiin",
+ "respond_to_probes_description": "Salli tämän instanssin vastata Reticulum-koettimipyyntöihin verkosta.",
+ "enable_remote_management": "Ota etähallinta käyttöön",
+ "enable_remote_management_description": "Salli tämän Reticulum-instanssin etähallinta, kun se on määritetty RNS-asetuksissa.",
+ "shared_instance_type": "Jaetun instanssin tyyppi",
+ "shared_instance_type_default": "Alustan oletus",
+ "shared_instance_type_description": "Käytä TCP:tä, kun verkkotunnuspistokkeet eivät ole käytettävissä (yleistä Androidilla). Jätä oletus muutoin.",
+ "instance_name": "Instanssin nimi",
+ "instance_name_description": "Eristä useita jaettuja instansseja yhdessä järjestelmässä. Oletusarvo on yleensä sopiva.",
+ "rpc_config": "RPC-pääsy",
+ "rpc_config_description": "Kopioi nämä rivit toisen ohjelman [reticulum]-osioon saadaksesi täyden jaetun instanssin RPC-pääsyn (hallinta, liittymän tila, polkutiedot).",
+ "rpc_config_unavailable": "RPC-avain ei ole vielä saatavilla. Käynnistä Reticulum ensin jaettuna instanssina.",
+ "rpc_config_copied": "RPC-asetukset kopioitu leikepöydälle",
+ "copy_rpc_config": "Kopioi RPC-asetukset",
+ "connected_to_shared_instance": "Tämä MeshChatX-prosessi on liitetty ulkoiseen jaettuun Reticulum-instanssiin. Muokkaa kyseisen instanssin asetuksia muuttaaksesi jako-/RPC-asetuksia.",
+ "copy_failed": "Kopiointi leikepöydälle epäonnistui",
"rpc_key_hidden": "Piilotettu — napauta näyttääksesi",
"rpc_key_show": "Näytä RPC-avain",
"rpc_key_hide": "Piilota RPC-avain",
@@ -704,119 +704,119 @@
"plugins": {
"settings": {
"title": "Liitännäiset",
- "description": "Install, enable, and review permissions for MeshChatX plugins. ZIP and WASM installs show a confirmation dialog with permissions, signature status, and security findings.",
+ "description": "Asenna, ota käyttöön ja tarkista MeshChatX-liitännäisten käyttöoikeudet. ZIP- ja WASM-asennukset näyttävät vahvistusikkunan, jossa on käyttöoikeudet, allekirjoituksen tila ja turvallisuustiedot.",
"enable": "Ota käyttöön",
"disable": "Poista käytöstä",
"remove": "Poista",
"permissions": "Oikeudet",
- "install_zip": "Install plugin from ZIP or WASM bundle",
+ "install_zip": "Asenna liitännäinen ZIP- tai WASM-paketista",
"enabled": "Liitännäinen otettu käyttöön",
"disabled": "Liitännäinen poistettu käytöstä",
"removed": "Liitännäinen poistettu",
"installed": "Liitännäinen asennettu",
"auto_disabled": "Liitännäinen poistettiin käytöstä automaattisesti: {reason}",
"kill_switch": "Liitännäinen poistettiin käytöstä: {reason}",
- "empty_state": "No plugins installed yet. Upload a plugin ZIP or WASM bundle to get started.",
- "drag_drop": "Drag and drop a plugin ZIP or WASM bundle here",
- "choose_file": "Choose ZIP or WASM file",
+ "empty_state": "Liitännäisiä ei ole vielä asennettu. Lataa liitännäisen ZIP- tai WASM-paketti aloittaaksesi.",
+ "drag_drop": "Vedä ja pudota liitännäisen ZIP- tai WASM-paketti tähän",
+ "choose_file": "Valitse ZIP- tai WASM-tiedosto",
"confirm_remove": "Poistetaanko lisäosa \"{name}\"? Tiedostot ja tallennetut tiedot poistetaan.",
"badge_enabled": "Käytössä",
"badge_disabled": "Pois",
- "badge_frontend": "UI",
+ "badge_frontend": "Käyttöliittymä",
"badge_wasm": "WASM",
"install_failed": "Lisäosan asennus epäonnistui: {reason}",
"installing": "Asennetaan lisäosaa...",
- "badge_network": "Network",
- "network_endpoints": "Network endpoints",
- "previewing": "Reviewing plugin...",
+ "badge_network": "Verkko",
+ "network_endpoints": "Verkon päätepisteet",
+ "previewing": "Tarkistetaan liitännäistä...",
"badge_python": "Python",
- "badge_signed": "Signed",
- "badge_trusted": "Trusted",
- "badge_invalid_signature": "Invalid signature",
- "badge_tampered": "Tampered"
+ "badge_signed": "Allekirjoitettu",
+ "badge_trusted": "Luotettu",
+ "badge_invalid_signature": "Virheellinen allekirjoitus",
+ "badge_tampered": "Peukaloitu"
},
"permissions": {
- "none": "No elevated permissions",
- "hooks.announce.received": "Receive mesh announce events",
- "hooks.rns.link.event": "Receive RNS link packet and close events",
- "managers.destinationPath.read": "Read the Reticulum path table",
- "managers.rnsLink.open": "Open RNS links to destinations",
- "managers.rnsLink.identify": "Identify on RNS links",
- "managers.rnsLink.request": "Send request/response over RNS links",
- "managers.rnsLink.send": "Send packets over RNS links",
- "managers.rnsLink.close": "Close RNS links",
- "storage.isolated": "Use isolated plugin storage",
- "network.fetch": "Make outbound internet HTTP requests"
+ "none": "Ei korotettuja käyttöoikeuksia",
+ "hooks.announce.received": "Vastaanota mesh-ilmoitustapahtumia",
+ "hooks.rns.link.event": "Vastaanota RNS-linkkipaketti- ja sulkemistapahtumia",
+ "managers.destinationPath.read": "Lue Reticulum-reittitaulukko",
+ "managers.rnsLink.open": "Avaa RNS-linkkejä kohteisiin",
+ "managers.rnsLink.identify": "Tunnistaudu RNS-linkeillä",
+ "managers.rnsLink.request": "Lähetä pyyntö/vastaus RNS-linkkien yli",
+ "managers.rnsLink.send": "Lähetä paketteja RNS-linkkien yli",
+ "managers.rnsLink.close": "Sulje RNS-linkkejä",
+ "storage.isolated": "Käytä eristettyä liitännäistallennustilaa",
+ "network.fetch": "Tee ulospäin suuntautuvia internet-HTTP-pyyntöjä"
},
"install_dialog": {
- "title": "Install plugin",
- "network_title": "Install plugin with network access",
- "message": "Review permissions for \"{name}\" ({id}) before installing.",
- "permissions": "Requested permissions",
- "permissions_hint": "Uncheck any permission you do not want to grant. Denied capabilities stay unavailable at runtime.",
- "grant": "Allow",
- "network_endpoints": "External network endpoints",
- "network_endpoints_blocked": "Network access is not granted. These URLs will remain blocked.",
- "network_endpoints_unknown": "This plugin requests network access but did not declare specific endpoints.",
- "cancel": "Cancel",
- "confirm": "Install",
- "close": "Close",
- "signature": "Signature",
- "signature_unsigned": "Unsigned",
- "signature_signed": "Signed",
- "signature_trusted": "Trusted publisher",
- "signature_invalid": "Invalid signature (install blocked)",
- "trust_publisher": "Trust this publisher",
- "security_findings": "Security findings"
+ "title": "Asenna liitännäinen",
+ "network_title": "Asenna liitännäinen verkkoyhteydellä",
+ "message": "Tarkista käyttöoikeudet kohteelle \"{name}\" ({id}) ennen asennusta.",
+ "permissions": "Pyydetyt käyttöoikeudet",
+ "permissions_hint": "Poista valinta niistä käyttöoikeuksista, joita et halua myöntää. Kiellettyjä ominaisuuksia ei voi käyttää suorituksen aikana.",
+ "grant": "Salli",
+ "network_endpoints": "Ulkoiset verkkopäätepisteet",
+ "network_endpoints_blocked": "Verkkoyhteyttä ei ole myönnetty. Nämä URL-osoitteet pysyvät estettyinä.",
+ "network_endpoints_unknown": "Tämä liitännäinen pyytää verkkoyhteyttä, mutta ei ilmoittanut tiettyjä päätepisteitä.",
+ "cancel": "Peruuta",
+ "confirm": "Asenna",
+ "close": "Sulje",
+ "signature": "Allekirjoitus",
+ "signature_unsigned": "Allekirjoittamaton",
+ "signature_signed": "Allekirjoitettu",
+ "signature_trusted": "Luotettu julkaisija",
+ "signature_invalid": "Virheellinen allekirjoitus (asennus estetty)",
+ "trust_publisher": "Luota tähän julkaisijaan",
+ "security_findings": "Turvallisuushavainnot"
},
"sideband": {
- "title": "Sideband plugins",
- "description": "Optional Sideband-compatible Python plugins loaded from a directory. They run in-process with full host access when enabled.",
- "master_enable": "Enable Sideband plugin loader (dangerous)",
- "command_enable": "Enable Sideband command plugins",
- "path": "Plugin directory path",
- "save": "Save Sideband settings",
- "reload": "Reload Sideband plugins",
- "loaded": "Loaded Sideband plugins",
- "saved": "Sideband plugin settings saved",
- "reloaded": "Sideband plugins reloaded",
- "danger_confirm": "Sideband plugins run as full Python code inside MeshChatX with filesystem, network, and LXMF access. Enable only if you trust every script in the directory."
+ "title": "Sideband-liitännäiset",
+ "description": "Valinnaiset Sideband-yhteensopivat Python-liitännäiset, jotka ladataan hakemistosta. Ne toimivat prosessin sisällä täydellä isäntäpääsyllä, kun ne on otettu käyttöön.",
+ "master_enable": "Ota Sideband-liitännäisten lataaja käyttöön (vaarallinen)",
+ "command_enable": "Ota Sideband-komentoliitännäiset käyttöön",
+ "path": "Liitännäishakemiston polku",
+ "save": "Tallenna Sideband-asetukset",
+ "reload": "Lataa Sideband-liitännäiset uudelleen",
+ "loaded": "Ladatut Sideband-liitännäiset",
+ "saved": "Sideband-liitännäisten asetukset tallennettu",
+ "reloaded": "Sideband-liitännäiset ladattu uudelleen",
+ "danger_confirm": "Sideband-liitännäiset toimivat täysinäisenä Python-koodina MeshChatX:ssä, jolla on pääsy tiedostojärjestelmään, verkkoon ja LXMF:ään. Ota käyttöön vain, jos luotat jokaiseen hakemiston skriptiin."
}
},
"selftest": {
"title": "Järjestelmän itsetestaus",
- "description": "Run diagnostic checks for the network stack, database, identity, imports, storage, LXMF, subprocess/run-module, SQLite, identity files, loopback TCP, unicode paths, RNode helpers, bot launcher argv, HTTP status/config/health/auth/bots/security/interfaces/reticulum-instance/identities/favourites/telephone/plugins/sideband/RRC APIs, plugin runtime, WebSocket, RNS Link API, and bot lifecycle.",
+ "description": "Suorita diagnostiikkatarkistuksia verkkopinon, tietokannan, identiteetin, tuontien, tallennuksen, LXMF:n, aliprosessin/suoritusmoduulin, SQLiten, identiteettitiedostojen, loopback TCP:n, unicode-polkujen, RNode-avustajien, bot-käynnistimen argumenttien, HTTP-tilan/konfiguraation/kunnon/todennuksen/bottien/turvallisuuden/liitäntöjen/reticulum-instanssin/identiteettien/suosikkien/puhelimen/lisäosien/sideband/RRC-rajapintojen, lisäosien suoritusympäristön, WebSocketin, RNS Link -rajapinnan ja botin elinkaaren osalta.",
"run_test_btn": "Suorita diagnostiikka",
"running": "Suoritetaan diagnostiikkaa...",
"stack_up": "Verkkopino",
"config_good": "Asetusten eheys",
"db_good": "Tietokantayhteys",
"read_write": "Tallennustilan luku/kirjoitus",
- "identity_good": "Identity Loaded",
- "imports_good": "Critical Imports",
+ "identity_good": "Identiteetti ladattu",
+ "imports_good": "Kriittiset tuonnit",
"storage_lock_good": "Storage Lock",
"temp_fs_good": "Temp Filesystem",
- "public_assets_good": "Public Assets",
- "lxmf_router_good": "LXMF Router",
+ "public_assets_good": "Julkiset resurssit",
+ "lxmf_router_good": "LXMF-reititin",
"subprocess_good": "Subprocess Spawn",
"run_module_good": "MeshChatX Run-Module",
"sqlite_roundtrip": "SQLite Roundtrip",
- "identity_roundtrip": "Identity File Roundtrip",
- "loopback_tcp": "Loopback TCP Bind",
+ "identity_roundtrip": "Identiteettitiedoston edestakainen matka",
+ "loopback_tcp": "Loopback TCP -sidonta",
"unicode_path_good": "Unicode Path I/O",
- "rnode_support_good": "RNode Support Module",
- "bot_launcher_good": "Bot Launcher Argv",
- "http_status_good": "HTTP Status",
- "http_app_info_good": "HTTP App Info",
- "http_config_good": "HTTP Config",
- "http_db_health_good": "HTTP Database Health",
- "http_auth_csrf_good": "HTTP Auth CSRF",
- "http_bots_status_good": "HTTP Bots Status",
- "http_security_good": "HTTP Server Security",
- "http_interfaces_good": "HTTP RNS Interfaces",
- "http_identities_good": "HTTP Identities",
- "http_favourites_good": "HTTP Favourites",
- "http_telephone_good": "HTTP Telephone Status",
+ "rnode_support_good": "RNode-tukimoduuli",
+ "bot_launcher_good": "Bot-käynnistimen argumentit",
+ "http_status_good": "HTTP-tila",
+ "http_app_info_good": "HTTP-sovellustiedot",
+ "http_config_good": "HTTP-konfiguraatio",
+ "http_db_health_good": "HTTP-tietokannan kunto",
+ "http_auth_csrf_good": "HTTP-todennus CSRF",
+ "http_bots_status_good": "HTTP-bottien tila",
+ "http_security_good": "HTTP-palvelimen turvallisuus",
+ "http_interfaces_good": "HTTP-RNS-liitännät",
+ "http_identities_good": "HTTP-identiteetit",
+ "http_favourites_good": "HTTP-suosikit",
+ "http_telephone_good": "HTTP-puhelimen tila",
"websocket_good": "WebSocket",
"bots_lifecycle": "Botin luonti / käynnistys / pysäytys / poisto",
"passed": "Hyväksytty",
@@ -824,16 +824,16 @@
"status_label": "Tila",
"reason_label": "Syy",
"checks_completed": "Kaikki tarkistukset suoritettiin onnistuneesti.",
- "http_reticulum_instance_good": "HTTP RNS Instance Settings",
+ "http_reticulum_instance_good": "HTTP-RNS-instanssin asetukset",
"expand_reason": "Näytä virheen tiedot",
"collapse_reason": "Piilota virheen tiedot",
- "http_plugins_good": "HTTP Plugins API",
- "http_plugins_trust_good": "HTTP Plugin Trust List",
- "http_sideband_plugins_good": "HTTP Sideband Plugins",
- "http_sideband_config_good": "HTTP Sideband Config",
- "http_rrc_hubs_good": "HTTP RRC Hubs",
- "http_rrc_servers_good": "HTTP RRC Servers",
- "plugins_runtime_good": "Plugin Manager Runtime",
+ "http_plugins_good": "HTTP-lisäosien rajapinta",
+ "http_plugins_trust_good": "HTTP-lisäosien luottamuslista",
+ "http_sideband_plugins_good": "HTTP-Sideband-lisäosat",
+ "http_sideband_config_good": "HTTP-Sideband-konfiguraatio",
+ "http_rrc_hubs_good": "HTTP-RRC-keskukset",
+ "http_rrc_servers_good": "HTTP-RRC-palvelimet",
+ "plugins_runtime_good": "Lisäosien hallinnan suoritusympäristö",
"websocket_rns_link_good": "WebSocket RNS Link API"
},
"maintenance": {
@@ -1123,7 +1123,7 @@
"loopback_local_body": "Reticulum käyttää jaettu sisäistä instanssia. Keskustellaksesi toisen paikallisen RNS-prosessin kanssa, osoita TCP-asiakassovitin osoitteeseen 127.0.0.1 ja instanssin porttiin tai liitä ulkoinen sovitinmoduuli.",
"loopback_local_docs_hint": "Tutustu tuettuihin tyyppeihin luvusta Interfaces.",
"loopback_local_docs_link": "Avaa paikallisen Reticulum-ohjekirjan",
- "custom_external_intro": "Types such as WeaveInterface or your own class are loaded when Reticulum finds a matching module file (TypeName.py) under interfacepath and exposes interface_class (see RNS source). Options below are merged into the interface stanza in your config file.",
+ "custom_external_intro": "Tyypit, kuten WeaveInterface tai oma luokkasi, ladataan, kun Reticulum löytää vastaavan moduulitiedoston (TypeName.py) interfacepath-polusta ja paljastaa interface_class (katso RNS-lähdekoodi). Alla olevat asetukset yhdistetään liittymästanzaan asetustiedostossasi.",
"custom_external_type_label": "Sovitintyypin nimi",
"custom_external_type_placeholder": "WeaveInterface",
"custom_external_json_label": "Lisävalinnat (JSON-objekti)",
@@ -1186,7 +1186,7 @@
"select_file": "Valitse MBTiles-tiedosto",
"offline_mode": "Yhteydetön tila",
"online_mode": "Verkkotila",
- "attribution": "Attribution",
+ "attribution": "Attribuointi",
"bounds": "Rajat",
"center": "Keskitä",
"zoom": "Zoomaa",
@@ -1213,7 +1213,7 @@
"tile_server_url_hint": "Käytä {z}, {x}, {y} lähennykselle, sarakkeelle, riville",
"tile_server_saved": "Laattapalvelimen URL tallennettu",
"tile_server_openstreetmap": "OpenStreetMap",
- "nominatim_api_url": "Nominatim API URL",
+ "nominatim_api_url": "Nominatim API -osoite",
"nominatim_api_url_placeholder": "https://nominatim.openstreetmap.org",
"nominatim_api_url_hint": "Nominatim geokoodauspalvelun URLn alkuosa",
"nominatim_api_saved": "Nominatim API URL tallennettu",
@@ -1351,7 +1351,7 @@
"txpower": "TX teho",
"spreading_factor": "SF",
"coding_rate": "Koodaustaajuus",
- "bitrate": "Bitrate",
+ "bitrate": "Bittinopeus",
"tx": "TX",
"rx": "RX",
"noise": "Kohina",
@@ -1536,7 +1536,7 @@
"location_request_sent": "Sijaintipyyntö lähetetty",
"failed_send_location_request": "Sijaintipyynnön lähetys epäonnistui",
"fetching_location": "Noudetaan sijaintia...",
- "location_disabled": "Location sharing is disabled. Enable it in Settings > Location.",
+ "location_disabled": "Sijainnin jakaminen on poistettu käytöstä. Ota se käyttöön kohdassa Asetukset > Sijainti.",
"location_sent": "Sijainnin jako onnistui",
"location_requested": "Sijaintia pyydetty",
"remove_image_confirm": "Haluatko varmasti poistaa tämän kuvaliitteen?",
@@ -1693,7 +1693,7 @@
"micron_wasm_update_toast_installed": "Asennettiin Micron WASM {tag}.",
"micron_wasm_update_toast_uploaded": "Asennettiin WASM tiedostosta.",
"micron_wasm_update_toast_reverted": "Palautettiin paketin Micron WASM.",
- "failed_update_reticulum_instance": "Failed to update Reticulum instance settings!"
+ "failed_update_reticulum_instance": "Reticulum-esiintymän asetusten päivitys epäonnistui!"
},
"debug": {
"title": "Vianetsintälokit",
@@ -1719,7 +1719,7 @@
"visualiser": {
"title": "Verkon havainnollistaja",
"description": "Havaittujen solmujen ja yhteyksiä kaavio.",
- "reticulum_mesh": "Reticulum Mesh",
+ "reticulum_mesh": "Reticulum-verkko",
"network_visualizer": "Verkon havainnollistaja",
"node_info": "Solmun tiedot",
"hash": "tiiviste (hash)",
@@ -2035,478 +2035,478 @@
"col_license": "Lisenssi"
},
"tools": {
- "utilities": "Utilities",
- "power_tools": "Utilities",
- "diagnostics_description": "Mesh and Reticulum utilities in one place: reachability, paths, file transfer, translation, documentation, and hardware helpers. Open any row for the full tool.",
- "back_to_tools": "Back to tools",
+ "utilities": "Työkalut",
+ "power_tools": "Työkalut",
+ "diagnostics_description": "Mesh- ja Reticulum-apuohjelmat yhdessä paikassa: saavutettavuus, polut, tiedostonsiirto, käännös, dokumentaatio ja laiteapu. Avaa mikä tahansa rivi saadaksesi koko työkalun.",
+ "back_to_tools": "Takaisin työkaluihin",
"beta_badge": "Beta",
"alpha_badge": "Alpha",
"ping": {
"title": "Ping",
- "description": "Measure round-trip time to another node or app that answers ping."
+ "description": "Mittaa edestakainen matka-aika toiseen solmuun tai sovellukseen, joka vastaa pingiin."
},
"rnprobe": {
"title": "RNProbe",
- "description": "Send test payloads over the mesh to check reachability and delay."
+ "description": "Lähetä testikuormia verkon yli tarkistaaksesi saavutettavuuden ja viiveen."
},
"rncp": {
"title": "RNCP",
- "description": "Send files to or fetch files from another destination over Reticulum, with progress and optional compression."
+ "description": "Lähetä tai hae tiedostoja toiseen kohteeseen Reticulumin yli, edistymisen ja valinnaisen pakkauksen kanssa."
},
"rnsh": {
"title": "RNSH",
- "description": "Manage persistent rnsh sessions"
+ "description": "Hallitse pysyviä rnsh-istuntoja"
},
"rnstatus": {
"title": "RNStatus",
- "description": "Per-interface traffic counters and link status from your Reticulum instance."
+ "description": "Liikennelaskurit ja linkkitila Reticulum-esiintymästäsi liitäntäkohtaisesti."
},
"rnpath": {
"title": "RNPath",
- "description": "Inspect paths and announce queues, and request or drop routes when you need to steer traffic.",
- "failed_fetch": "Failed to fetch path data",
- "path_dropped": "Path dropped",
- "failed_drop": "Could not drop path",
- "error_drop": "Error dropping path",
- "failed_request": "Failed to request path",
- "paths_dropped": "Paths dropped",
- "failed_drop_paths": "Failed to drop paths",
- "purge_confirm": "Purge all announce queues? This cannot be undone.",
- "queues_purged": "Announce queues purged",
- "failed_purge": "Failed to purge queues"
+ "description": "Tarkastele polkuja ja ilmoitusjonoja, sekä pyydä tai pudota reittejä, kun haluat ohjata liikennettä.",
+ "failed_fetch": "Polkutietojen haku epäonnistui",
+ "path_dropped": "Polku pudotettu",
+ "failed_drop": "Polkua ei voitu pudottaa",
+ "error_drop": "Virhe pudotettaessa polkua",
+ "failed_request": "Polun pyyntö epäonnistui",
+ "paths_dropped": "Polut pudotettu",
+ "failed_drop_paths": "Polkujen pudotus epäonnistui",
+ "purge_confirm": "Tyhjennetäänkö kaikki ilmoitusjonot? Tätä ei voi peruuttaa.",
+ "queues_purged": "Ilmoitusjonot tyhjennetty",
+ "failed_purge": "Jonojen tyhjennys epäonnistui"
},
"rnpath_trace": {
"title": "RNS Path Trace",
- "description": "List each hop along the path to a destination hash.",
+ "description": "Listaa jokainen hyppy polulla kohdehajautusarvoon.",
"destination_hash": "Kohteen tiiviste",
- "placeholder": "Enter 32-char destination hash...",
- "trace": "Trace Path",
- "tracing": "Tracing path through the mesh...",
- "total_hops": "Total Hops",
- "interface": "Exit Interface",
- "next_hop": "Next Hop",
- "ready_title": "Trace a Path",
- "ready_desc": "Enter a destination hash to list hops along the current path.",
- "unknown_hops": "{count} Intermediate Hops",
- "ping_test": "Test with Ping"
+ "placeholder": "Syötä 32-merkin kohdehajautusarvo...",
+ "trace": "Jäljitä polku",
+ "tracing": "Jäljitetään polkua verkon läpi...",
+ "total_hops": "Hypyt yhteensä",
+ "interface": "Poistumisliitäntä",
+ "next_hop": "Seuraava hyppy",
+ "ready_title": "Jäljitä polku",
+ "ready_desc": "Syötä kohdehajautusarvo listataksesi hypyt nykyisellä polulla.",
+ "unknown_hops": "{count} välivaiheen hyppyä",
+ "ping_test": "Testaa pingillä"
},
"translator": {
"title": "Kääntäjä",
- "description": "Translate text with LibreTranslate over the network or Argos Translate on this device."
+ "description": "Käännä tekstiä LibreTranslate-verkon yli tai Argos Translate -sovelluksella tällä laitteella."
},
"forwarder": {
- "title": "Forwarder",
- "description": "Forward LXMF messages between addresses while keeping reply routing intact."
+ "title": "Välittäjä",
+ "description": "Välitä LXMF-viestejä osoitteiden välillä pitäen vastausreititys ehjänä."
},
"propagation_nodes": {
- "title": "Propagation nodes",
- "description": "Pick preferred mesh propagation nodes, watch live stats, and run quick path checks."
+ "title": "Etenemissolmut",
+ "description": "Valitse haluamasi verkon etenemissolmut, tarkkaile reaaliaikaisia tilastoja ja suorita nopeita polkutarkistuksia."
},
"sieve_filters": {
- "title": "Sieve filters",
- "description": "Auto-sort mail: match words in peer names or message text, then hide, silence, move to a folder, or block the sender.",
- "subtitle": "Rules run in order. Scope picks everyone, contacts only, or non-contacts only. Choose substring or regex matching. The first enabled rule whose scope fits and whose targets match wins.",
- "back_tools": "Back to tools",
- "rules_heading": "Rules",
- "add_rule": "Add rule",
- "order_hint": "Drag order is top to bottom: the first matching rule applies.",
- "empty_rules": "No rules yet. Add a rule or save an empty list to clear filters.",
+ "title": "Seulontasuodattimet",
+ "description": "Lajittele sähköpostit automaattisesti: etsi sanoja vertaisnimistä tai viestin tekstistä, sitten piilota, hiljennä, siirrä kansioon tai estä lähettäjä.",
+ "subtitle": "Säännöt suoritetaan järjestyksessä. Kohdealue valitsee kaikki, vain yhteystiedot tai vain ei-yhteystiedot. Valitse osajonon tai säännöllisen lausekkeen täsmäytys. Ensimmäinen käytössä oleva sääntö, jonka kohdealue sopii ja jonka kohteet täsmäävät, voittaa.",
+ "back_tools": "Takaisin työkaluihin",
+ "rules_heading": "Säännöt",
+ "add_rule": "Lisää sääntö",
+ "order_hint": "Vedä järjestys ylhäältä alas: ensimmäinen täsmäävä sääntö sovelletaan.",
+ "empty_rules": "Ei sääntöjä vielä. Lisää sääntö tai tallenna tyhjä lista tyhjentääksesi suodattimet.",
"enabled": "Päällä",
- "move_up": "Move up",
- "move_down": "Move down",
- "remove_rule": "Remove rule",
- "terms_label": "Terms or patterns",
- "terms_placeholder": "One per line or separated by commas. Matches are case-insensitive. You can also use regular expressions (one per line).",
- "match_targets_label": "Match in",
- "match_peer_fields": "Peer display name, custom name, contact fields",
- "match_message": "Message title and body (when available)",
- "match_targets_hint": "At least one target must stay enabled.",
- "match_mode_label": "Match style",
- "match_mode_substring": "Substring",
- "match_mode_regex": "Regular expression",
- "scope_label": "Applies to",
- "scope_everyone": "Everyone",
- "scope_contacts": "Contacts only",
- "scope_non_contacts": "Non-contacts only",
- "graph_scope_everyone": "Everyone",
+ "move_up": "Siirrä ylös",
+ "move_down": "Siirrä alas",
+ "remove_rule": "Poista sääntö",
+ "terms_label": "Termit tai mallit",
+ "terms_placeholder": "Yksi per rivi tai pilkuilla erotettuna. Täsmäykset eivät ole kirjainkoosta riippuvia. Voit myös käyttää säännöllisiä lausekkeita (yksi per rivi).",
+ "match_targets_label": "Täsmää kohteesta",
+ "match_peer_fields": "Vertaisen näyttönimi, oma nimi, yhteystietokentät",
+ "match_message": "Viestin otsikko ja sisältö (kun saatavilla)",
+ "match_targets_hint": "Vähintään yhden kohteen on pysyttävä käytössä.",
+ "match_mode_label": "Täsmäystyyli",
+ "match_mode_substring": "Alijono",
+ "match_mode_regex": "Säännöllinen lauseke",
+ "scope_label": "Koskee",
+ "scope_everyone": "Kaikki",
+ "scope_contacts": "Vain yhteystiedot",
+ "scope_non_contacts": "Vain ei-yhteystiedot",
+ "graph_scope_everyone": "Kaikki",
"graph_scope_contacts": "Yhteystiedot",
- "graph_scope_non_contacts": "Non-contacts",
- "graph_match_peer": "peer",
- "graph_match_message": "msg",
- "graph_match_mode_substring": "substring",
+ "graph_scope_non_contacts": "Ei-yhteystiedot",
+ "graph_match_peer": "vertainen",
+ "graph_match_message": "viesti",
+ "graph_match_mode_substring": "alijono",
"graph_match_mode_regex": "regex",
- "action_label": "Then",
- "action_hide": "Hide conversation",
- "action_ignore": "Ignore (no notifications)",
- "action_folder": "Move to folder",
- "action_banish": "Banish sender (full block)",
- "folder_label": "Folder",
+ "action_label": "Sitten",
+ "action_hide": "Piilota keskustelu",
+ "action_ignore": "Ohita (ei ilmoituksia)",
+ "action_folder": "Siirrä kansioon",
+ "action_banish": "Karkota lähettäjä (täysi esto)",
+ "folder_label": "Kansio",
"save": "Tallenna",
- "saving": "Saving…",
- "revert": "Reload",
- "saved": "Sieve filters saved",
- "save_failed": "Could not save sieve filters",
- "load_failed": "Could not load sieve filters",
- "flow_heading": "Rule flow",
- "flow_source": "Peers",
- "flow_source_hint": "Peer fields use announced display name, your custom name, and contact name or LXMF address.",
- "flow_if": "If",
- "flow_hide": "Hide",
+ "saving": "Tallennetaan…",
+ "revert": "Lataa uudelleen",
+ "saved": "Seulasuodattimet tallennettu",
+ "save_failed": "Seulasuodattimien tallennus epäonnistui",
+ "load_failed": "Seulasuodattimien lataus epäonnistui",
+ "flow_heading": "Säännön kulku",
+ "flow_source": "Vertaiset",
+ "flow_source_hint": "Vertaiskentät käyttävät ilmoitettua näyttönimeä, omaa nimeäsi ja yhteystietonimeä tai LXMF-osoitetta.",
+ "flow_if": "Jos",
+ "flow_hide": "Piilota",
"flow_banish": "Karkota",
- "flow_folder": "Folder",
- "flow_no_rules": "No rules"
+ "flow_folder": "Kansio",
+ "flow_no_rules": "Ei sääntöjä"
},
"message_blocklist": {
- "title": "Message blocklist",
- "description": "Auto-banish senders when their message or name matches a word or regex from your shared blocklist.",
- "beta_notice_title": "Beta (work in progress)",
- "beta_notice_body": "This tool is off until you turn it on. Words match regardless of case. Regex uses normal patterns. If something matches, the sender gets banished right away. Export a list to share with your group, or import one to merge or replace yours.",
- "enable_label": "Enable message blocklist",
- "enable_hint": "When disabled, entries are saved but no automatic banish runs.",
- "entries_heading": "Blocked phrases",
- "add_entry": "Add phrase",
- "empty_entries": "No phrases yet. Add entries or import a shared list.",
+ "title": "Viestien estolista",
+ "description": "Karkota lähettäjät automaattisesti, kun heidän viestinsä tai nimensä täsmää jaetun estolistasi sanaan tai regexiin.",
+ "beta_notice_title": "Beta (työn alla)",
+ "beta_notice_body": "Tämä työkalu on pois päältä, kunnes otat sen käyttöön. Sanat täsmäävät kirjainkoosta riippumatta. Regex käyttää normaaleja kuvioita. Jos jotain täsmää, lähettäjä karkotetaan heti. Vie lista jakaaksesi ryhmäsi kanssa, tai tuo lista yhdistääksesi tai korvataksesi omasi.",
+ "enable_label": "Ota viestien estolista käyttöön",
+ "enable_hint": "Kun pois käytöstä, merkinnät tallennetaan mutta automaattista karkotusta ei suoriteta.",
+ "entries_heading": "Estetyt ilmaukset",
+ "add_entry": "Lisää ilmaus",
+ "empty_entries": "Ei vielä ilmauksia. Lisää merkintöjä tai tuo jaettu lista.",
"entry_enabled": "Käytössä",
- "entry_placeholder": "spam phrase or regex pattern",
+ "entry_placeholder": "roskaposti-ilmaus tai regex-kuvio",
"remove_entry": "Poista",
- "scope_label": "Applies to",
- "scope_everyone": "Everyone",
- "scope_contacts": "Contacts only",
- "scope_non_contacts": "Non-contacts only",
- "match_in_label": "Match in",
- "match_message": "Message title and body",
- "match_peer_fields": "Peer display name and contact fields",
- "match_mode_substring": "Word",
+ "scope_label": "Koskee",
+ "scope_everyone": "Kaikki",
+ "scope_contacts": "Vain yhteystiedot",
+ "scope_non_contacts": "Vain ei-yhteystiedot",
+ "match_in_label": "Täsmää kohteesta",
+ "match_message": "Viestin otsikko ja sisältö",
+ "match_peer_fields": "Vertaisen näyttönimi ja yhteystietokentät",
+ "match_mode_substring": "Sana",
"match_mode_regex": "Regex",
- "export": "Export",
+ "export": "Vie",
"import": "Tuo",
"save": "Tallenna",
- "saving": "Saving…",
- "revert": "Reload",
- "saved": "Blocklist saved",
- "save_failed": "Could not save blocklist",
- "load_failed": "Could not load blocklist",
- "enabled_toast": "Message blocklist enabled",
- "disabled_toast": "Message blocklist disabled",
- "exported": "Blocklist exported",
- "export_failed": "Could not export blocklist",
- "import_merge_confirm": "Merge with your current list? Choose Cancel to replace your list entirely.",
- "imported_merge": "Blocklist merged",
- "imported_replace": "Blocklist replaced",
- "import_failed": "Could not import blocklist"
+ "saving": "Tallennetaan…",
+ "revert": "Lataa uudelleen",
+ "saved": "Estolista tallennettu",
+ "save_failed": "Estolistan tallennus epäonnistui",
+ "load_failed": "Estolistan lataus epäonnistui",
+ "enabled_toast": "Viestien estolista otettu käyttöön",
+ "disabled_toast": "Viestien estolista poistettu käytöstä",
+ "exported": "Estolista viety",
+ "export_failed": "Estolistan vienti epäonnistui",
+ "import_merge_confirm": "Yhdistetäänkö nykyiseen listaasi? Valitse Peruuta korvataksesi listasi kokonaan.",
+ "imported_merge": "Estolista yhdistetty",
+ "imported_replace": "Estolista korvattu",
+ "import_failed": "Estolistan tuonti epäonnistui"
},
"repository_server": {
- "title": "Repository server",
- "description": "Redistribute MeshChatX and Reticulum-related Python wheels plus your own files over plain HTTP so people on your network—or on this device—can download them.",
- "subtitle": "Refresh the included software packages, add your own files, or start a download page for other devices.",
- "back_tools": "Back to tools",
- "http_heading": "Plain HTTP mirror",
- "host_label": "Listen address",
+ "title": "Varastopalvelin",
+ "description": "Jaa MeshChatX- ja Reticulum-liittyviä Python-pyöriä sekä omia tiedostojasi tavallisen HTTP:n kautta, jotta verkkosi tai tämän laitteen käyttäjät voivat ladata niitä.",
+ "subtitle": "Päivitä mukana tulevia ohjelmistopaketteja, lisää omia tiedostoja tai käynnistä lataussivu muille laitteille.",
+ "back_tools": "Takaisin työkaluihin",
+ "http_heading": "Tavallinen HTTP-peili",
+ "host_label": "Kuunteluosoite",
"port_label": "Portti",
- "start_http": "Start",
+ "start_http": "Käynnistä",
"stop_http": "Pysäytä",
- "restart_http": "Restart",
- "http_listen_label": "Listening:",
- "open_http": "Open in browser",
- "http_started": "HTTP server started",
- "http_stopped": "HTTP server stopped",
- "http_restarted": "HTTP server restarted",
- "http_err_generic": "HTTP server request failed",
- "http_err_invalid_host": "Invalid listen address",
- "http_err_invalid_port": "Invalid port",
- "http_err_already_running": "HTTP server is already running",
- "http_err_bind_failed": "Could not bind (port in use or permission denied)",
- "upload_heading": "Upload file",
- "choose_file": "Choose file",
- "refresh_bundled_tooltip": "Download bundled wheels to this device (needs network)",
- "refresh_started": "Downloading bundled packages…",
- "refresh_fetching": "Getting {pkg}…",
- "refresh_ok": "Bundled wheels refreshed",
- "refresh_ok_count": "{n} packages downloaded",
- "refresh_failed": "Could not refresh bundled wheels",
- "refresh_pip_missing": "pip was not found on this system. Install pip and try again.",
- "refresh_partial": "Some packages could not be downloaded (details below)",
- "refresh_partial_toast": "Bundled download finished with some failures",
- "files_heading": "Files",
+ "restart_http": "Käynnistä uudelleen",
+ "http_listen_label": "Kuuntelee:",
+ "open_http": "Avaa selaimessa",
+ "http_started": "HTTP-palvelin käynnistetty",
+ "http_stopped": "HTTP-palvelin pysäytetty",
+ "http_restarted": "HTTP-palvelin käynnistettiin uudelleen",
+ "http_err_generic": "HTTP-palvelimen pyyntö epäonnistui",
+ "http_err_invalid_host": "Virheellinen kuunteluosoite",
+ "http_err_invalid_port": "Virheellinen portti",
+ "http_err_already_running": "HTTP-palvelin on jo käynnissä",
+ "http_err_bind_failed": "Sidontaa ei voitu suorittaa (portti varattu tai käyttöoikeus evätty)",
+ "upload_heading": "Lataa tiedosto",
+ "choose_file": "Valitse tiedosto",
+ "refresh_bundled_tooltip": "Lataa mukana tulevat pyörät tälle laitteelle (tarvitsee verkon)",
+ "refresh_started": "Ladataan mukana tulevia paketteja…",
+ "refresh_fetching": "Haetaan {pkg}…",
+ "refresh_ok": "Mukana tulevat pyörät päivitetty",
+ "refresh_ok_count": "{n} pakettia ladattu",
+ "refresh_failed": "Mukana tulevia pyöriä ei voitu päivittää",
+ "refresh_pip_missing": "pipiä ei löytynyt tästä järjestelmästä. Asenna pip ja yritä uudelleen.",
+ "refresh_partial": "Joitakin paketteja ei voitu ladata (tarkemmat tiedot alla)",
+ "refresh_partial_toast": "Mukana tuleva lataus valmistui, mutta joitakin virheitä ilmeni",
+ "files_heading": "Tiedostot",
"col_name": "Nimi",
"col_source": "Lähde",
- "col_size": "Size",
- "empty": "No files yet. Upload a file or refresh bundled wheels.",
+ "col_size": "Koko",
+ "empty": "Ei tiedostoja vielä. Lataa tiedosto tai päivitä mukana tulevat pyörät.",
"delete": "Poista",
- "delete_confirm": "Delete uploaded file \"{name}\"?",
- "delete_ok": "File removed",
- "delete_failed": "Could not delete file",
- "upload_ok": "File uploaded",
- "upload_failed": "Upload failed",
- "load_failed": "Could not load repository"
+ "delete_confirm": "Poistetaanko ladattu tiedosto \"{name}\"?",
+ "delete_ok": "Tiedosto poistettu",
+ "delete_failed": "Tiedostoa ei voitu poistaa",
+ "upload_ok": "Tiedosto ladattu",
+ "upload_failed": "Lataus epäonnistui",
+ "load_failed": "Varastoa ei voitu ladata"
},
"rnode_flasher": {
"title": "RNode Flasher",
- "description": "Flash or update RNode firmware from the browser when your hardware and browser support USB or Wi‑Fi flashing.",
- "select_device": "1. Select your device",
- "product": "Product",
- "model": "Model",
- "connection_method": "Connection Method",
- "serial": "Serial",
+ "description": "Päivitä tai asenna RNode-laiteohjelmisto selaimesta, kun laitteistosi ja selaimesi tukevat USB- tai Wi-Fi-päivitystä.",
+ "select_device": "1. Valitse laitteesi",
+ "product": "Tuote",
+ "model": "Malli",
+ "connection_method": "Yhteystapa",
+ "serial": "Sarjaportti",
"wifi": "WiFi",
- "ip_address": "IP Address",
- "ip_address_placeholder": "e.g. 192.168.1.100",
- "select_product": "Select a Product",
- "select_model": "Select a Model",
- "enter_dfu_mode": "Enter DFU Mode",
- "entering_dfu_mode": "Entering DFU Mode...",
- "find_device_issue": "Can't find your device? Open an issue on",
- "select_firmware": "2. Select firmware to flash (.zip)",
- "flash_now": "Flash Now",
- "flashing": "Flashing: {percentage}%",
- "flashing_file_progress": "File {current}/{total}: {percentage}%",
- "connecting_device": "Connecting to device...",
- "download_firmware": "Download Firmware",
- "official_firmware": "Official Firmware",
- "ce_firmware": "CE Firmware",
- "transport_node_firmware": "Transport Node Firmware",
- "common_issues": "Common Issues",
- "hardware_failure": "Hardware Failure:",
- "provision_eeprom_hint": "You need to provision the eeprom in step 3.",
- "firmware_corrupt": "Firmware Corrupt:",
- "set_firmware_hash_hint": "You need to set the firmware hash in step 4.",
- "step_provision": "3. Provision EEPROM",
- "provision_description": "Sets device info, checksum and blank signature",
- "provision": "Provision",
- "provisioning_wait": "Provisioning: please wait...",
- "step_set_hash": "4. Set Firmware Hash",
- "set_hash_description": "Uses hash from board",
- "set_firmware_hash": "Set Firmware Hash",
- "setting_hash_wait": "Setting Firmware Hash: please wait...",
- "step_done": "5. Finalize",
- "download_recommended": "Download & Load Recommended Firmware",
+ "ip_address": "IP-osoite",
+ "ip_address_placeholder": "esim. 192.168.1.100",
+ "select_product": "Valitse tuote",
+ "select_model": "Valitse malli",
+ "enter_dfu_mode": "Siirry DFU-tilaan",
+ "entering_dfu_mode": "Siirrytään DFU-tilaan...",
+ "find_device_issue": "Etkö löydä laitettasi? Avaa ongelma osoitteessa",
+ "select_firmware": "2. Valitse laiteohjelma (.zip)",
+ "flash_now": "Flash nyt",
+ "flashing": "Flashaus: {percentage}%",
+ "flashing_file_progress": "Tiedosto {current}/{total}: {percentage}%",
+ "connecting_device": "Yhdistetään laitteeseen...",
+ "download_firmware": "Lataa laiteohjelmisto",
+ "official_firmware": "Virallinen laiteohjelmisto",
+ "ce_firmware": "CE-laiteohjelmisto",
+ "transport_node_firmware": "Kuljetussolmun laiteohjelma",
+ "common_issues": "Yleiset ongelmat",
+ "hardware_failure": "Laitteistovika:",
+ "provision_eeprom_hint": "Sinun on alustettava EEPROM vaiheessa 3.",
+ "firmware_corrupt": "Laiteohjelmisto vioittunut:",
+ "set_firmware_hash_hint": "Sinun on asetettava laiteohjelman hash vaiheessa 4.",
+ "step_provision": "3. Valmistele EEPROM",
+ "provision_description": "Asettaa laitetiedot, tarkistussumman ja tyhjän allekirjoituksen",
+ "provision": "Alusta",
+ "provisioning_wait": "Alustetaan: odota...",
+ "step_set_hash": "4. Aseta laiteohjelman hash",
+ "set_hash_description": "Käyttää hashia levyltä",
+ "set_firmware_hash": "Aseta laiteohjelman hash",
+ "setting_hash_wait": "Asetetaan laiteohjelman hash: odota...",
+ "step_done": "5. Viimeistele",
+ "download_recommended": "Lataa ja lataa suositeltu laiteohjelmisto",
"downloading": "Lataa...",
- "done_description": "If you made it this far, and all previous steps were successful, your RNode should be ready to use.",
- "meshchat_usage": "To use RNode with MeshChat, you will need to add an RNodeInterface in the Interfaces → Add Interface page.",
- "sideband_usage": "To use RNode with Sideband, you will need to configure it in Hardware → RNode and enable Connectivity → Connect via RNode.",
- "restart_warning": "You must restart MeshChat and Sideband for interface setting changes to take effect, otherwise nothing will happen!",
- "advanced_tools": "Advanced Tools",
- "detect_rnode": "Detect RNode",
- "reboot_rnode": "Reboot RNode",
- "read_display": "Read Display",
- "dump_eeprom": "Dump EEPROM",
- "wipe_eeprom": "Wipe EEPROM",
- "eeprom_console_hint": "EEPROM dumps are shown in dev tools console.",
- "configure_bluetooth": "Configure Bluetooth (optional)",
- "bluetooth_info_1": "Bluetooth is not supported on all devices.",
- "bluetooth_info_2": "Some devices use Bluetooth Classic, and some use BLE (Bluetooth Low Energy)",
- "bluetooth_info_3": "Put the RNode into Bluetooth Pairing mode, then connect to it from Android Bluetooth settings.",
- "bluetooth_info_4": "Once you have initiated a pair request from Android, a PIN should show on the RNode display.",
- "bluetooth_info_5": "In Sideband you will need to enable Connect using Bluetooth in Hardware → RNode.",
- "bluetooth_info_6": "If your device uses BLE you will also need to enable Device requires BLE in Hardware → RNode.",
- "bluetooth_restart_warning": "Don't forget to restart Sideband for the setting changes to take effect!",
+ "done_description": "Jos pääsit tänne asti ja kaikki aiemmat vaiheet onnistuivat, RNodesi pitäisi olla käyttövalmis.",
+ "meshchat_usage": "Käyttääksesi RNodea MeshChatin kanssa, sinun on lisättävä RNodeInterface Liittymät → Lisää liittymä -sivulla.",
+ "sideband_usage": "Käyttääksesi RNodea Sidebandin kanssa, sinun on määritettävä se kohdassa Laitteisto → RNode ja otettava käyttöön Yhteys → Yhdistä RNoden kautta.",
+ "restart_warning": "Sinun on käynnistettävä MeshChat ja Sideband uudelleen, jotta liittymäasetusten muutokset tulevat voimaan, muuten mitään ei tapahdu!",
+ "advanced_tools": "Lisätyökalut",
+ "detect_rnode": "Tunnista RNode",
+ "reboot_rnode": "Käynnistä RNode uudelleen",
+ "read_display": "Lue näyttö",
+ "dump_eeprom": "Tyhjennä EEPROM",
+ "wipe_eeprom": "Tyhjennä EEPROM",
+ "eeprom_console_hint": "EEPROM-tyhjennykset näkyvät kehittäjätyökalujen konsolissa.",
+ "configure_bluetooth": "Määritä Bluetooth (valinnainen)",
+ "bluetooth_info_1": "Bluetooth ei ole tuettu kaikissa laitteissa.",
+ "bluetooth_info_2": "Jotkut laitteet käyttävät Bluetooth Classicia, ja jotkut BLE:tä (Bluetooth Low Energy).",
+ "bluetooth_info_3": "Aseta RNode Bluetooth-paritustilaan ja yhdistä siihen Androidin Bluetooth-asetuksista.",
+ "bluetooth_info_4": "Kun olet aloittanut paripyynnön Androidista, PIN-koodin pitäisi näkyä RNode-näytöllä.",
+ "bluetooth_info_5": "Sidebandissa sinun on otettava käyttöön Yhdistä Bluetoothilla kohdassa Laitteisto → RNode.",
+ "bluetooth_info_6": "Jos laitteesi käyttää BLE:tä, sinun on myös otettava käyttöön Laite vaatii BLE:n kohdassa Laitteisto → RNode.",
+ "bluetooth_restart_warning": "Älä unohda käynnistää Sideband uudelleen, jotta asetusmuutokset tulevat voimaan!",
"enable": "Käytä",
"disable": "Älä käytä",
- "start_pairing": "Start Pairing",
- "configure_tnc": "Configure TNC Mode (optional)",
- "tnc_info_1": "TNC mode allows an RNode to be used as a KISS compatible TNC over the Serial Port.",
- "tnc_info_2": "This mode makes it usable with amateur radio software that can talk to a KISS TNC over a serial port.",
- "tnc_warning": "You must leave TNC mode disabled when using RNode with apps like MeshChat or Sideband.",
- "frequency": "Frequency (Hz)",
+ "start_pairing": "Aloita pariliitos",
+ "configure_tnc": "Määritä TNC-tila (valinnainen)",
+ "tnc_info_1": "TNC-tila mahdollistaa RNoden käytön KISS-yhteensopivana TNC:nä sarjaportin kautta.",
+ "tnc_info_2": "Tämä tila tekee siitä käytettävän amatööriradio-ohjelmistojen kanssa, jotka voivat keskustella KISS TNC:n kanssa sarjaportin kautta.",
+ "tnc_warning": "Sinun on jätettävä TNC-tila pois päältä käytettäessä RNodea sovellusten, kuten MeshChatin tai Sidebandin, kanssa.",
+ "frequency": "Taajuus (Hz)",
"bandwidth": "Kaista",
- "tx_power": "Tx Power (dBm)",
- "spreading_factor": "Spreading Factor",
+ "tx_power": "Lähetysteho (dBm)",
+ "spreading_factor": "Hajautuskerroin",
"coding_rate": "Koodaustaajuus",
- "configure_display": "Configure Display",
+ "configure_display": "Määritä näyttö",
"rotation": "Kierrä",
- "reconditioning": "Reconditioning",
- "start": "Start",
+ "reconditioning": "Kunnostus",
+ "start": "Aloita",
"stop": "Pysäytä",
- "rotation_v180_warning": "Setting display rotation requires firmware v1.80+",
+ "rotation_v180_warning": "Näytön kiertämisen asettaminen vaatii laiteohjelmistoversion 1.80+",
"errors": {
- "failed_download": "Failed to download firmware: {error}",
- "firmware_not_found_in_release": "Recommended firmware not found in the latest release.",
- "web_serial_not_supported": "Web Serial is not supported in this browser. Please use Chrome, Edge, or another Chromium-based browser.",
- "no_device_selected": "No device selected. Please select a serial port.",
- "failed_connect": "Failed to connect to device: {error}",
- "not_an_rnode": "Selected device is not an RNode! Please make sure you've selected the correct serial port.",
- "failed_dfu": "Failed to enter DFU mode: {error}",
- "select_firmware_first": "Please select a firmware file (.zip) first.",
- "failed_flash": "Firmware flashing failed: {error}",
- "failed_ota": "OTA flashing failed: {error}",
- "esptool_not_loaded": "esptool-js could not be loaded. Please refresh the page and try again.",
- "no_flash_config": "Flash configuration is not available for the selected device. Please select a different device or check the firmware file.",
- "failed_extract": "Required file \"{file}\" not found in firmware ZIP file. Please download the correct firmware for your device.",
- "failed_detect": "Failed to detect RNode. Make sure the device is connected and in the correct mode.",
- "provisioned_already": "Eeprom is already provisioned. You must wipe it to reprovision!",
- "select_product_first": "Please select a product!",
- "select_model_first": "Please select a model!",
- "not_provisioned": "Eeprom is not provisioned. You must do this first!",
- "failed_provision": "failed to provision: {error}",
- "failed_set_hash": "failed to set firmware hash: {error}",
- "failed_reboot": "Failed to reboot RNode: {error}",
- "failed_read_display": "Failed to read display: {error}",
- "failed_dump_eeprom": "Failed to dump EEPROM: {error}",
- "failed_wipe_eeprom": "Failed to wipe EEPROM: {error}",
- "failed_enable_tnc": "Failed to enable TNC mode: {error}",
- "failed_disable_tnc": "Failed to disable TNC mode: {error}",
- "failed_enable_bluetooth": "Failed to enable Bluetooth: {error}",
- "failed_disable_bluetooth": "Failed to disable Bluetooth: {error}",
- "failed_start_pairing": "Failed to start pairing: {error}",
- "failed_set_rotation": "Failed to set display rotation: {error}",
- "failed_start_reconditioning": "Failed to start display reconditioning: {error}",
- "no_main_bin": "Could not locate the main firmware binary in the ZIP.",
- "invalid_host": "Please enter a valid host or IP address.",
- "bluetooth_flash_unsupported": "Bluetooth cannot be used to flash firmware. Use Serial or WiFi to flash, then return to Bluetooth for management.",
- "failed_diagnostics": "Failed to run diagnostics: {error}",
- "failed_detect_with_reason": "Failed to detect RNode: {error}"
+ "failed_download": "Laiteohjelmiston lataaminen epäonnistui: {error}",
+ "firmware_not_found_in_release": "Suositeltua laiteohjelmistoa ei löytynyt uusimmasta julkaisusta.",
+ "web_serial_not_supported": "Web Serial ei ole tuettu tässä selaimessa. Käytä Chromea, Edgeä tai muuta Chromium-pohjaista selainta.",
+ "no_device_selected": "Laitetta ei ole valittu. Valitse sarjaportti.",
+ "failed_connect": "Yhteyden muodostaminen laitteeseen epäonnistui: {error}",
+ "not_an_rnode": "Valittu laite ei ole RNode! Varmista, että olet valinnut oikean sarjaportin.",
+ "failed_dfu": "DFU-tilaan siirtyminen epäonnistui: {error}",
+ "select_firmware_first": "Valitse ensin laiteohjelmistotiedosto (.zip).",
+ "failed_flash": "Laiteohjelmiston päivitys epäonnistui: {error}",
+ "failed_ota": "OTA-päivitys epäonnistui: {error}",
+ "esptool_not_loaded": "esptool-js ei latautunut. Päivitä sivu ja yritä uudelleen.",
+ "no_flash_config": "Flash-kokoonpano ei ole käytettävissä valitulle laitteelle. Valitse toinen laite tai tarkista laiteohjelmistotiedosto.",
+ "failed_extract": "Tarvittavaa tiedostoa \"{file}\" ei löytynyt laiteohjelmiston ZIP-tiedostosta. Lataa oikea laiteohjelmisto laitteellesi.",
+ "failed_detect": "RNodea ei voitu tunnistaa. Varmista, että laite on kytketty ja oikeassa tilassa.",
+ "provisioned_already": "EEPROM on jo alustettu. Sinun on tyhjennettävä se alustaaksesi uudelleen!",
+ "select_product_first": "Valitse tuote!",
+ "select_model_first": "Valitse malli!",
+ "not_provisioned": "EEPROMia ei ole alustettu. Sinun on tehtävä tämä ensin!",
+ "failed_provision": "Varustaminen epäonnistui: {error}",
+ "failed_set_hash": "Laiteohjelmiston tiivisteen asettaminen epäonnistui: {error}",
+ "failed_reboot": "RNode-käynnistyksen uudelleenkäynnistys epäonnistui: {error}",
+ "failed_read_display": "Näytön lukeminen epäonnistui: {error}",
+ "failed_dump_eeprom": "EEPROMin tyhjentäminen epäonnistui: {error}",
+ "failed_wipe_eeprom": "EEPROMin tyhjennys epäonnistui: {error}",
+ "failed_enable_tnc": "TNC-tilan käyttöönotto epäonnistui: {error}",
+ "failed_disable_tnc": "TNC-tilan poistaminen käytöstä epäonnistui: {error}",
+ "failed_enable_bluetooth": "Bluetoothin käyttöönotto epäonnistui: {error}",
+ "failed_disable_bluetooth": "Bluetoothin poistaminen käytöstä epäonnistui: {error}",
+ "failed_start_pairing": "Pariliitoksen aloittaminen epäonnistui: {error}",
+ "failed_set_rotation": "Näytön kierron asettaminen epäonnistui: {error}",
+ "failed_start_reconditioning": "Näytön uudelleenkunnostuksen aloittaminen epäonnistui: {error}",
+ "no_main_bin": "Päälaitteohjelmiston binääritiedostoa ei löytynyt ZIP-tiedostosta.",
+ "invalid_host": "Anna kelvollinen isäntä- tai IP-osoite.",
+ "bluetooth_flash_unsupported": "Bluetoothia ei voi käyttää laiteohjelmiston päivittämiseen. Käytä Serial- tai WiFi-yhteyttä päivittämiseen, palaa sitten Bluetoothiin hallintaa varten.",
+ "failed_diagnostics": "Diagnostiikan suorittaminen epäonnistui: {error}",
+ "failed_detect_with_reason": "RNodea ei voitu tunnistaa: {error}"
},
"alerts": {
- "firmware_downloaded": "Recommended firmware has been downloaded and loaded.",
- "dfu_ready": "Device should now be in DFU mode. You can now proceed with flashing firmware.",
- "flash_success": "Firmware has been flashed successfully!",
- "rebooting": "Board is rebooting!",
- "eeprom_wipe_confirm": "Are you sure you want to wipe the eeprom on this device? This will take about 30 seconds. An alert will show when the eeprom wipe has finished.",
- "eeprom_wiped": "eeprom has been wiped!",
- "eeprom_dumped": "EEPROM dumped to console",
- "rnode_detected": "RNode v{version} detected",
- "provision_success": "device has been provisioned!",
- "hash_success": "firmware hash has been set!",
- "tnc_enabled": "TNC mode has been enabled!",
- "tnc_disabled": "TNC mode has been disabled!",
- "bluetooth_enabled": "Bluetooth has been enabled!",
- "bluetooth_disabled": "Bluetooth has been disabled!",
- "bluetooth_pairing_pin": "Bluetooth Pairing Pin: {pin}",
- "bluetooth_pairing_started": "Pairing mode started (30s)",
- "rotation_updated": "Rotation updated",
- "reconditioning_started": "Reconditioning started",
- "diagnostics_healthy": "Diagnostics: device looks healthy.",
- "diagnostics_issues": "Diagnostics: {count} issue(s) detected."
+ "firmware_downloaded": "Suositeltu laiteohjelmisto on ladattu ja asennettu.",
+ "dfu_ready": "Laitteen pitäisi nyt olla DFU-tilassa. Voit nyt jatkaa laiteohjelmiston päivittämistä.",
+ "flash_success": "Laiteohjelmisto on päivitetty onnistuneesti!",
+ "rebooting": "Piirilevy käynnistyy uudelleen!",
+ "eeprom_wipe_confirm": "Oletko varma, että haluat tyhjentää laitteen eeprom-muistin? Tämä kestää noin 30 sekuntia. Ilmoitus näytetään, kun tyhjennys on valmis.",
+ "eeprom_wiped": "eeprom on tyhjennetty!",
+ "eeprom_dumped": "EEPROM dumpattu konsoliin",
+ "rnode_detected": "RNode v{version} havaittu",
+ "provision_success": "laite on valmisteltu!",
+ "hash_success": "laiteohjelmiston hash on asetettu!",
+ "tnc_enabled": "TNC-tila on otettu käyttöön!",
+ "tnc_disabled": "TNC-tila on poistettu käytöstä!",
+ "bluetooth_enabled": "Bluetooth on otettu käyttöön!",
+ "bluetooth_disabled": "Bluetooth on poistettu käytöstä!",
+ "bluetooth_pairing_pin": "Bluetooth-pariliitoksen PIN-koodi: {pin}",
+ "bluetooth_pairing_started": "Pariliitostila käynnistetty (30s)",
+ "rotation_updated": "Kierto päivitetty",
+ "reconditioning_started": "Uudelleenkäsittely aloitettu",
+ "diagnostics_healthy": "Diagnostiikka: laite vaikuttaa terveeltä.",
+ "diagnostics_issues": "Diagnostiikka: {count} ongelma(a) havaittu."
},
- "simple": "Simple",
- "advanced": "Advanced",
- "original": "Original",
- "open_original_tab": "Open the original flasher in a new tab",
+ "simple": "Yksinkertainen",
+ "advanced": "Lisäasetukset",
+ "original": "Alkuperäinen",
+ "open_original_tab": "Avaa alkuperäinen flasheri uudessa välilehdessä",
"bluetooth": "Bluetooth",
- "preparing_firmware": "Preparing firmware...",
- "uploading": "Uploading: {percentage}%",
- "select_firmware_file": "Or select a firmware file (.zip)",
- "wifi_help": "The IP address of your RNode on the local network.",
- "run_diagnostics": "Diagnostics",
+ "preparing_firmware": "Valmistellaan laiteohjelmistoa...",
+ "uploading": "Lähetetään: {percentage}%",
+ "select_firmware_file": "Tai valitse laiteohjelmatiedosto (.zip)",
+ "wifi_help": "RNode-laitteen IP-osoite paikallisverkossa.",
+ "run_diagnostics": "Diagnostiikka",
"support": {
"serial": {
- "title": "USB serial is unavailable",
- "polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
- "android_webview_no_serial": "Android does not support Web Serial in this view. Use a desktop browser or the built-in flasher.",
- "browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
- "android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
- "unknown": "USB serial cannot be initialised in this environment."
+ "title": "USB-sarjaportti ei ole käytettävissä",
+ "polyfill_not_loaded": "USB-sarjaportin polyfilliä ei ole vielä ladattu.",
+ "android_webview_no_serial": "Android ei tue Web Serialia tässä näkymässä. Käytä työpöytäselainta tai sisäänrakennettua flasheria.",
+ "browser_unsupported": "Tämä selain ei tue Web Serialia. Kokeile Chromea, Edgeä tai muuta Chromium-pohjaista selainta.",
+ "android_use_chrome": "Androidilla tämän sivun avaaminen Chromessa mahdollistaa Web Serialin käytön WebUSB:n kautta.",
+ "unknown": "USB-sarjaporttia ei voida alustaa tässä ympäristössä."
},
"bluetooth": {
- "title": "Bluetooth is unavailable",
- "android_bridge_not_implemented": "Web Bluetooth is not available here. Use the OS Bluetooth settings or a different browser.",
- "browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
- "insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
- "requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
- "unknown": "Bluetooth cannot be initialised in this environment."
+ "title": "Bluetooth ei ole käytettävissä",
+ "android_bridge_not_implemented": "Web Bluetooth ei ole käytettävissä täällä. Käytä käyttöjärjestelmän Bluetooth-asetuksia tai toista selainta.",
+ "browser_unsupported": "Tämä selain ei tue Web Bluetoothia. Kokeile Chromea tai Edgeä.",
+ "insecure_context": "Web Bluetooth vaatii suojatun yhteyden (HTTPS tai localhost).",
+ "requires_https": "Avaa flasher HTTPS:n tai localhostin kautta ottaaksesi Bluetoothin käyttöön.",
+ "unknown": "Bluetoothia ei voida alustaa tässä ympäristössä."
},
"actions": {
- "load_polyfill": "Load polyfill",
- "request_bluetooth": "Allow Bluetooth",
- "open_settings": "Open settings",
- "polyfill_loading": "Loading USB serial polyfill...",
- "bluetooth_requested": "Bluetooth permission requested."
+ "load_polyfill": "Lataa polyfill",
+ "request_bluetooth": "Salli Bluetooth",
+ "open_settings": "Avaa asetukset",
+ "polyfill_loading": "Ladataan USB-sarjaportin polyfilliä...",
+ "bluetooth_requested": "Bluetooth-lupaa pyydetty."
}
},
"diagnostics": {
- "title": "Device Diagnostics",
- "healthy": "Healthy",
- "needs_attention": "Needs attention",
- "issues_detected": "Issues detected",
- "firmware_version": "Firmware",
+ "title": "Laitteen diagnostiikka",
+ "healthy": "Terve",
+ "needs_attention": "Vaatii huomiota",
+ "issues_detected": "Ongelmia havaittu",
+ "firmware_version": "Laiteohjelmisto",
"platform": "Alusta",
- "board": "Board",
- "provisioned": "Provisioned",
- "product": "Product",
- "model": "Model",
- "firmware_hash": "FW hash",
- "target_hash": "Target hash",
+ "board": "Piirilevy",
+ "provisioned": "Varustettu",
+ "product": "Tuote",
+ "model": "Malli",
+ "firmware_hash": "FW-hash",
+ "target_hash": "Kohdetiiviste",
"suggestions": {
- "not_provisioned": "EEPROM is not provisioned. Run step 3 (Provision EEPROM).",
- "firmware_hash_missing": "Firmware hash is missing. Run step 4 (Set Firmware Hash).",
- "firmware_hash_mismatch": "Firmware hash mismatch. Re-flash the firmware and re-run step 4.",
- "product_mismatch": "Selected product does not match the connected device.",
- "no_firmware_version": "Could not read firmware version. Try reconnecting the device.",
- "detect_failed": "Could not detect this RNode. Verify cable, port, and power.",
- "read_timeout": "Device did not respond in time. Try reconnecting or rebooting it."
+ "not_provisioned": "EEPROMia ei ole varustettu. Suorita vaihe 3 (Varusta EEPROM).",
+ "firmware_hash_missing": "Laiteohjelmiston tiiviste puuttuu. Suorita vaihe 4 (Aseta laiteohjelmiston tiiviste).",
+ "firmware_hash_mismatch": "Laiteohjelmiston tiiviste ei täsmää. Päivitä laiteohjelmisto uudelleen ja suorita vaihe 4 uudelleen.",
+ "product_mismatch": "Valittu tuote ei vastaa liitettyä laitetta.",
+ "no_firmware_version": "Laiteohjelmiston versiota ei voitu lukea. Yritä yhdistää laite uudelleen.",
+ "detect_failed": "Tätä RNodea ei voitu tunnistaa. Tarkista kaapeli, portti ja virta.",
+ "read_timeout": "Laite ei vastannut ajoissa. Yritä yhdistää tai käynnistää se uudelleen."
}
}
},
"micron_editor": {
- "title": "Micron Editor",
- "description": "Write Nomad Network Micron pages with a live preview.",
- "editor": "Editor",
- "preview": "Preview",
+ "title": "Micron-editori",
+ "description": "Kirjoita Nomad Network Micron -sivuja live-esikatselulla.",
+ "editor": "Editori",
+ "preview": "Esikatselu",
"save": "Tallenna",
"edit": "Muokkaa",
- "view_preview": "View Preview",
- "placeholder": "Enter your Micron markup here...",
+ "view_preview": "Näytä esikatselu",
+ "placeholder": "Kirjoita Micron-merkintäsi tähän...",
"reset": "Palauta",
- "new_tab": "New Tab",
- "rename_tab": "Rename Tab",
- "confirm_reset": "Are you sure you want to reset the editor? All your tabs and content will be lost.",
- "confirm_delete_tab": "Are you sure you want to delete this tab?",
- "main_tab": "Main",
- "guide_tab": "NomadNet Guide",
- "parser_by": "Using Micron Parser by",
- "wasm_active": "WASM engine active (fast parser)",
- "wasm_inactive": "JS engine active (slow parser, click for WASM)",
- "publish_prompt_name": "index.mu already exists on \"{server}\". Enter a page name (without .mu):",
- "publish_published": "Published \"{page}\" to {server}",
- "publish_failed": "Failed to publish page",
- "publish_all_prompt_server": "Enter server name to publish all tabs to:\n\nAvailable: {servers}",
- "publish_server_not_found": "Server not found: {server}",
- "publish_all_done": "Published {published}/{total} tabs to {server}"
+ "new_tab": "Uusi välilehti",
+ "rename_tab": "Nimeä välilehti uudelleen",
+ "confirm_reset": "Haluatko varmasti nollata editorin? Kaikki välilehdet ja sisältö menetetään.",
+ "confirm_delete_tab": "Haluatko varmasti poistaa tämän välilehden?",
+ "main_tab": "Pää",
+ "guide_tab": "NomadNet-opas",
+ "parser_by": "Käyttää Micron-jäsennintä, tekijä",
+ "wasm_active": "WASM-moottori aktiivinen (nopea jäsennin)",
+ "wasm_inactive": "JS-moottori aktiivinen (hidas jäsennin, napsauta saadaksesi WASM)",
+ "publish_prompt_name": "index.mu on jo olemassa palvelimella \"{server}\". Anna sivun nimi (ilman .mu):",
+ "publish_published": "Julkaistu \"{page}\" palvelimelle {server}",
+ "publish_failed": "Sivun julkaisu epäonnistui",
+ "publish_all_prompt_server": "Anna palvelimen nimi, jolle kaikki välilehdet julkaistaan:\n\nSaatavilla: {servers}",
+ "publish_server_not_found": "Palvelinta ei löydy: {server}",
+ "publish_all_done": "Julkaistu {published}/{total} välilehteä palvelimelle {server}"
},
"reticulum_config_editor": {
- "title": "Reticulum Config Editor",
- "description": "Edit the main Reticulum (RNS) configuration file inside MeshChatX. Restart RNS to apply changes.",
- "info": "This is the raw Reticulum config file. Saving will not apply changes until RNS is restarted.",
- "loading": "Loading config...",
- "reload": "Reload",
+ "title": "Reticulum-asetusten muokkain",
+ "description": "Muokkaa Reticulum (RNS) -pääkonfiguraatiotiedostoa MeshChatX:ssä. Käynnistä RNS uudelleen ottaaksesi muutokset käyttöön.",
+ "info": "Tämä on raaka Reticulum-asetustiedosto. Tallennus ei ota muutoksia käyttöön ennen kuin RNS käynnistetään uudelleen.",
+ "loading": "Ladataan asetuksia...",
+ "reload": "Lataa uudelleen",
"save": "Tallenna",
"saving": "Tallennetaan...",
- "saved": "Reticulum config saved",
- "discard": "Discard",
- "unsaved": "Unsaved changes",
- "restore_defaults": "Restore defaults",
- "restoring": "Restoring defaults...",
- "restored": "Reticulum config restored to defaults",
- "confirm_restore": "Restore the Reticulum config to defaults? Your current config will be overwritten.",
- "confirm_leave": "You have unsaved changes. Leave anyway?",
+ "saved": "Reticulum-asetukset tallennettu",
+ "discard": "Hylkää",
+ "unsaved": "Tallentamattomat muutokset",
+ "restore_defaults": "Palauta oletusarvot",
+ "restoring": "Palautetaan oletusarvoja...",
+ "restored": "Reticulum-asetukset palautettu oletusarvoihin",
+ "confirm_restore": "Palauta Reticulum-asetukset oletusarvoihin? Nykyiset asetukset ylikirjoitetaan.",
+ "confirm_leave": "Sinulla on tallentamattomia muutoksia. Poistu silti?",
"restart_required": "Uudelleenkäynnistys vaaditaan",
- "restart_description": "Reticulum must be restarted for your config changes to take effect.",
- "restart_now": "Restart RNS now",
- "restart_done": "Reticulum restarted",
- "failed_load": "Failed to load Reticulum config",
- "failed_save": "Failed to save Reticulum config",
- "failed_restore": "Failed to restore Reticulum config",
- "failed_restart": "Failed to restart Reticulum",
- "tips_title": "Tips",
- "tip_sections": "The config must contain [reticulum] and [interfaces] sections.",
- "tip_restart": "Use the Restart RNS button or the Interfaces page to apply changes.",
- "tip_mobile": "Useful whenever you prefer not to edit the file in another program on disk."
+ "restart_description": "Reticulum on käynnistettävä uudelleen, jotta asetusmuutokset tulevat voimaan.",
+ "restart_now": "Käynnistä RNS nyt uudelleen",
+ "restart_done": "Reticulum käynnistettiin uudelleen",
+ "failed_load": "Reticulum-asetusten lataus epäonnistui",
+ "failed_save": "Reticulum-asetusten tallennus epäonnistui",
+ "failed_restore": "Reticulum-asetusten palautus epäonnistui",
+ "failed_restart": "Reticulumin uudelleenkäynnistys epäonnistui",
+ "tips_title": "Vinkit",
+ "tip_sections": "Asetusten tulee sisältää [reticulum]- ja [interfaces]-osiot.",
+ "tip_restart": "Käytä Käynnistä RNS uudelleen -painiketta tai Liittymät-sivua ottaaksesi muutokset käyttöön.",
+ "tip_mobile": "Hyödyllinen aina, kun et halua muokata tiedostoa toisessa ohjelmassa levyltä."
},
"paper_message": {
- "title": "Paper Message",
- "description": "Encode LXMF messages as QR codes or scan codes back into the app."
+ "title": "Paperiviesti",
+ "description": "Koodaa LXMF-viestit QR-koodeiksi tai skannaa koodit takaisin sovellukseen."
},
"mesh_server": {
- "title": "Mesh Server",
- "description": "Publish Micron pages and small files for mesh peers to open."
+ "title": "Mesh-palvelin",
+ "description": "Julkaise Micron-sivuja ja pieniä tiedostoja mesh-vertaisten avattavaksi."
},
"rns_tunnel": {
"title": "RNS Tunnel",
- "description": "Carry IP traffic over Reticulum links (in development)."
+ "description": "Kuljeta IP-liikennettä Reticulum-linkkien yli (kehitysvaiheessa)."
},
"rns_filesync": {
"title": "RNS Filesync",
- "description": "Sync files between mesh peers (in development)."
+ "description": "Synkronoi tiedostoja verkon vertaisten välillä (kehitysvaiheessa)."
},
"bots": {
"title": "LXMFy-botit",
@@ -2535,176 +2535,176 @@
},
"relay_chat": {
"title": "Keskustelukanavat",
- "subtitle": "Reticulum Relay Chat hubs and rooms",
- "hubs": "Hubs",
- "add_hub": "Add Hub",
- "add_hub_title": "Add a Relay Chat Hub",
- "hub_hash": "Hub Destination Hash",
- "hub_hash_placeholder": "Enter the hub identity hash",
- "hub_name": "Hub Name (optional)",
- "hub_name_placeholder": "My favourite hub",
- "dest_name": "Destination Aspect (optional)",
- "no_hubs": "No hubs configured yet. Add one to get started.",
- "no_rooms": "No rooms joined. Join a room to start chatting.",
- "available_rooms": "Available Rooms",
- "join": "Join",
- "no_room_selected": "Select a room to view messages.",
- "load_previous": "Load earlier messages",
- "rooms": "Rooms",
- "members": "Members",
- "join_room": "Join Room",
- "join_room_placeholder": "room name",
- "leave_room": "Leave Room",
- "clear_messages": "Clear Messages",
- "connect": "Connect",
- "disconnect": "Disconnect",
- "remove_hub": "Remove Hub",
- "remove_hub_confirm": "Remove this hub and all of its local history?",
- "leave_room_confirm": "Leave this room?",
- "clear_messages_confirm": "Clear all messages in this room?",
- "message_placeholder": "Write a message...",
- "send": "Send",
- "settings": "Hub Settings",
- "auto_reconnect": "Auto reconnect",
- "auto_list": "Auto list rooms",
- "auto_who": "Auto list members",
- "nickname": "Nickname override",
- "nickname_placeholder": "Leave blank to use display name",
+ "subtitle": "Reticulum Relay Chat -keskukset ja -huoneet",
+ "hubs": "Keskukset",
+ "add_hub": "Lisää keskus",
+ "add_hub_title": "Lisää Relay Chat -keskus",
+ "hub_hash": "Keskuksen kohdehash",
+ "hub_hash_placeholder": "Syötä keskuksen identiteettihash",
+ "hub_name": "Keskuksen nimi (valinnainen)",
+ "hub_name_placeholder": "Suosikkikeskukseni",
+ "dest_name": "Kohdeaspekti (valinnainen)",
+ "no_hubs": "Ei vielä määritettyjä keskuksia. Lisää yksi aloittaaksesi.",
+ "no_rooms": "Et ole liittynyt yhteenkään huoneeseen. Liity huoneeseen aloittaaksesi keskustelun.",
+ "available_rooms": "Käytettävissä olevat huoneet",
+ "join": "Liity",
+ "no_room_selected": "Valitse huone nähdäksesi viestit.",
+ "load_previous": "Lataa aikaisempia viestejä",
+ "rooms": "Huoneet",
+ "members": "Jäsenet",
+ "join_room": "Liity huoneeseen",
+ "join_room_placeholder": "huoneen nimi",
+ "leave_room": "Poistu huoneesta",
+ "clear_messages": "Tyhjennä viestit",
+ "connect": "Yhdistä",
+ "disconnect": "Katkaise yhteys",
+ "remove_hub": "Poista keskus",
+ "remove_hub_confirm": "Poistetaanko tämä keskus ja kaikki sen paikallinen historia?",
+ "leave_room_confirm": "Poistu tästä huoneesta?",
+ "clear_messages_confirm": "Tyhjennä kaikki viestit tästä huoneesta?",
+ "message_placeholder": "Kirjoita viesti...",
+ "send": "Lähetä",
+ "settings": "Keskuksen asetukset",
+ "auto_reconnect": "Yhdistä automaattisesti uudelleen",
+ "auto_list": "Listaa huoneet automaattisesti",
+ "auto_who": "Listaa jäsenet automaattisesti",
+ "nickname": "Nimimerkin ohitus",
+ "nickname_placeholder": "Jätä tyhjäksi käyttääksesi näyttönimeä",
"save": "Tallenna",
- "status_disconnected": "Disconnected",
- "status_connecting": "Connecting",
- "status_connected": "Connected",
+ "status_disconnected": "Ei yhteyttä",
+ "status_connecting": "Yhdistetään",
+ "status_connected": "Yhdistetty",
"status_failed": "Epäonnistunut",
- "motd": "Message of the day",
+ "motd": "Päivän viesti",
"system": "Järjestelmä",
- "hub_added": "Hub added",
- "hub_removed": "Hub removed",
- "settings_saved": "Settings saved",
- "messages_cleared": "Messages cleared",
- "joined_room": "Joined room",
- "left_room": "Left room",
- "invalid_hub_hash": "Enter a valid hub hash",
- "send_failed": "Failed to send message",
- "action_failed": "Action failed",
- "room_required": "A room name is required",
- "tab_connect": "Connect",
- "tab_host": "Host",
- "host_title": "Hosted Hubs",
- "host_subtitle": "Run your own Relay Chat hubs and create rooms others can join.",
- "create_hub": "Create Hub",
- "create_hub_title": "Create a Relay Chat Hub",
- "no_hosted_hubs": "No hosted hubs yet. Create one to start relaying chat.",
- "copy_hash": "Copy destination hash",
- "hash_copied": "Destination hash copied",
- "host_start": "Start",
+ "hub_added": "Keskus lisätty",
+ "hub_removed": "Keskus poistettu",
+ "settings_saved": "Asetukset tallennettu",
+ "messages_cleared": "Viestit tyhjennetty",
+ "joined_room": "Liitytty huoneeseen",
+ "left_room": "Poistuttu huoneesta",
+ "invalid_hub_hash": "Syötä kelvollinen keskushash",
+ "send_failed": "Viestin lähetys epäonnistui",
+ "action_failed": "Toiminto epäonnistui",
+ "room_required": "Huoneen nimi vaaditaan",
+ "tab_connect": "Yhdistä",
+ "tab_host": "Isännöi",
+ "host_title": "Isännöidyt keskukset",
+ "host_subtitle": "Aja omia Relay Chat -keskuksia ja luo huoneita, joihin muut voivat liittyä.",
+ "create_hub": "Luo keskus",
+ "create_hub_title": "Luo Relay Chat -keskus",
+ "no_hosted_hubs": "Ei vielä isännöityjä keskuksia. Luo yksi aloittaaksesi viestien välityksen.",
+ "copy_hash": "Kopioi kohdehash",
+ "hash_copied": "Kohdehash kopioitu",
+ "host_start": "Käynnistä",
"host_status_running": "Käynnissä",
"host_status_stopped": "Pysäytetty",
- "host_hub_not_running": "Start the hub before managing rooms or members.",
+ "host_hub_not_running": "Käynnistä keskus ennen huoneiden tai jäsenten hallintaa.",
"host_stop": "Pysäytä",
"host_announce": "Kuuluta nyt",
- "host_announced": "Announced",
- "host_delete": "Delete hub",
- "host_clients": "clients",
- "host_rooms": "rooms",
- "host_private": "private",
- "host_delete_room": "Delete room",
- "host_no_rooms": "No rooms yet.",
- "host_room_name": "room name",
- "host_room_topic": "topic (optional)",
- "host_add_room": "Add Room",
- "host_greeting": "Greeting (optional)",
- "host_greeting_placeholder": "Welcome message shown on connect",
- "host_announce_periodically": "Announce on the network",
- "host_hub_created": "Hub created",
- "host_delete_hub_confirm": "Delete this hosted hub? Connected clients will be disconnected.",
- "host_hub_deleted": "Hub deleted",
- "host_room_created": "Room created",
- "host_delete_room_confirm": "Delete this room?",
- "host_room_deleted": "Room deleted",
- "host_members_all_title": "Connected clients: {hub}",
+ "host_announced": "Ilmoitettu",
+ "host_delete": "Poista keskus",
+ "host_clients": "asiakkaat",
+ "host_rooms": "huoneet",
+ "host_private": "yksityinen",
+ "host_delete_room": "Poista huone",
+ "host_no_rooms": "Ei vielä huoneita.",
+ "host_room_name": "huoneen nimi",
+ "host_room_topic": "aihe (valinnainen)",
+ "host_add_room": "Lisää huone",
+ "host_greeting": "Tervehdys (valinnainen)",
+ "host_greeting_placeholder": "Tervetuloviesti, joka näytetään yhdistettäessä",
+ "host_announce_periodically": "Ilmoita verkossa",
+ "host_hub_created": "Keskus luotu",
+ "host_delete_hub_confirm": "Poista tämä isännöity keskus? Yhdistetyt asiakkaat katkaistaan.",
+ "host_hub_deleted": "Keskus poistettu",
+ "host_room_created": "Huone luotu",
+ "host_delete_room_confirm": "Poista tämä huone?",
+ "host_room_deleted": "Huone poistettu",
+ "host_members_all_title": "Yhdistetyt asiakkaat: {hub}",
"host_members_room_title": "#{room}: {hub}",
- "host_member_rooms": "Rooms",
- "host_members_search": "Search members...",
- "host_rooms_search": "Search rooms...",
- "host_rooms_search_empty": "No rooms match your search.",
- "host_moderation_uptime": "{time} uptime",
- "host_moderation_members": "{count} members",
- "host_members_select": "Select a member to view messages and moderate",
- "host_no_messages": "No messages from this user in the log yet",
- "host_ban_hub": "Ban from hub",
- "host_kick_confirm": "Kick {name} from #{room}?",
- "host_kick_pick_room": "Kick {name} from which room? Enter one of: {rooms}",
- "host_kick_no_room": "This user is not in any room, so they cannot be kicked.",
- "host_kick_room_invalid": "Room not found. Choose one of the listed rooms.",
- "host_cannot_moderate_self": "You cannot moderate your own connection.",
- "host_ban_confirm": "Ban {name} from this hub?",
- "host_room_ban_confirm": "Ban {name} from #{room}?",
- "host_manage_rooms": "Manage rooms",
- "host_moderate": "Moderate hub",
- "host_moderation_title": "Moderation",
- "host_moderation_title_hub": "Moderation: {hub}",
- "host_moderation_title_room": "Moderation: {hub} (#{room})",
- "host_moderation_tab_rooms": "Rooms",
- "host_moderation_tab_members": "Members",
- "host_moderation_hub_missing": "Hub not found.",
- "host_rooms_modal_title": "Rooms: {hub}",
- "host_rooms_select": "Select a room to view activity",
- "host_room_activity": "Recent activity",
- "host_no_activity": "No recent activity in this room",
- "hub_icon": "Hub icon",
- "hub_icon_choose": "Choose icon",
- "hub_icon_picker_title": "Choose hub icon",
- "hub_icon_search": "Search {count} icons...",
- "hub_icon_no_results": "No icons match your search.",
- "hub_icon_search_limit": "Showing first {count} results. Refine your search.",
- "hub_icon_reset_default": "Use default icon",
- "disabled_message": "Relay Chat is turned off in Settings. Enable it under Appearance to use hubs and hosting.",
- "ctx_add_hub": "Add hub",
- "ctx_add_room": "Join room",
- "ctx_connect_hub": "Connect",
- "ctx_disconnect_hub": "Disconnect",
- "ctx_hub_settings": "Hub settings",
- "ctx_remove_hub": "Remove hub",
- "ctx_leave_room": "Leave room",
- "ctx_reply_quote": "Reply with quote",
- "ctx_mention_user": "Mention user",
+ "host_member_rooms": "Huoneet",
+ "host_members_search": "Etsi jäseniä...",
+ "host_rooms_search": "Etsi huoneita...",
+ "host_rooms_search_empty": "Yksikään huone ei vastaa hakua.",
+ "host_moderation_uptime": "Käynnissä {time}",
+ "host_moderation_members": "{count} jäsentä",
+ "host_members_select": "Valitse jäsen nähdäksesi viestit ja moderoidaksesi",
+ "host_no_messages": "Ei vielä viestejä tältä käyttäjältä lokissa",
+ "host_ban_hub": "Estä keskuksesta",
+ "host_kick_confirm": "Potkaise {name} huoneesta #{room}?",
+ "host_kick_pick_room": "Potkaise {name} mistä huoneesta? Valitse yksi: {rooms}",
+ "host_kick_no_room": "Tämä käyttäjä ei ole missään huoneessa, joten häntä ei voida potkaista.",
+ "host_kick_room_invalid": "Huonetta ei löydy. Valitse yksi listatuista huoneista.",
+ "host_cannot_moderate_self": "Et voi moderoida omaa yhteyttäsi.",
+ "host_ban_confirm": "Estä {name} tästä keskuksesta?",
+ "host_room_ban_confirm": "Estä {name} huoneesta #{room}?",
+ "host_manage_rooms": "Hallitse huoneita",
+ "host_moderate": "Moderoi keskusta",
+ "host_moderation_title": "Moderointi",
+ "host_moderation_title_hub": "Moderointi: {hub}",
+ "host_moderation_title_room": "Moderointi: {hub} (#{room})",
+ "host_moderation_tab_rooms": "Huoneet",
+ "host_moderation_tab_members": "Jäsenet",
+ "host_moderation_hub_missing": "Keskusta ei löydy.",
+ "host_rooms_modal_title": "Huoneet: {hub}",
+ "host_rooms_select": "Valitse huone nähdäksesi toiminta",
+ "host_room_activity": "Viimeaikainen toiminta",
+ "host_no_activity": "Ei viimeaikaista toimintaa tässä huoneessa",
+ "hub_icon": "Keskuksen kuvake",
+ "hub_icon_choose": "Valitse kuvake",
+ "hub_icon_picker_title": "Valitse keskuksen kuvake",
+ "hub_icon_search": "Hae {count} kuvakkeesta...",
+ "hub_icon_no_results": "Yksikään kuvake ei vastaa hakua.",
+ "hub_icon_search_limit": "Näytetään ensimmäiset {count} tulosta. Tarkenna hakua.",
+ "hub_icon_reset_default": "Käytä oletuskuvaketta",
+ "disabled_message": "Relay Chat on pois päältä asetuksissa. Ota se käyttöön kohdassa Ulkoasu käyttääksesi keskuksia ja isännöintiä.",
+ "ctx_add_hub": "Lisää keskus",
+ "ctx_add_room": "Liity huoneeseen",
+ "ctx_connect_hub": "Yhdistä",
+ "ctx_disconnect_hub": "Katkaise yhteys",
+ "ctx_hub_settings": "Keskuksen asetukset",
+ "ctx_remove_hub": "Poista keskus",
+ "ctx_leave_room": "Poistu huoneesta",
+ "ctx_reply_quote": "Vastaa lainauksella",
+ "ctx_mention_user": "Mainitse käyttäjä",
"ctx_copy_message": "Kopioi viesti",
- "ctx_kick_user": "Kick user",
- "ctx_ban_user": "Ban user",
- "tab_discovery": "Discover",
- "discovery_title": "Discovered Hubs",
- "discovery_subtitle": "Relay Chat hubs heard announcing on the network.",
- "discovery_empty": "No hubs discovered yet. They appear here as they announce.",
+ "ctx_kick_user": "Potkaise käyttäjä",
+ "ctx_ban_user": "Estä käyttäjä",
+ "tab_discovery": "Löydä",
+ "discovery_title": "Löydetyt keskukset",
+ "discovery_subtitle": "Relay Chat -keskuksia, jotka on kuultu ilmoittavan verkossa.",
+ "discovery_empty": "Keskuksia ei ole vielä löydetty. Ne ilmestyvät tänne, kun ne ilmoittavat itsestään.",
"discovery_search": "Hae {count} hubia",
"discovery_add": "Lisää",
- "discovery_added": "Hub added from discovery",
+ "discovery_added": "Keskus lisätty löydöstä",
"discovery_open": "Avaa",
- "discovery_browse": "Browse discovered hubs",
+ "discovery_browse": "Selaa löydettyjä keskuksia",
"announced_ago": "Kuulutettu {time} sitten",
"hops_away": "{count} hyppyä",
- "back": "Back",
+ "back": "Takaisin",
"refresh": "Virkistä",
- "members_title": "Members",
+ "members_title": "Jäsenet",
"members_online": "Online",
"members_offline": "Offline",
- "no_members": "No one here yet",
- "show_members": "Show members",
- "hide_members": "Hide members",
- "discovery_refreshed": "Discovery refreshed",
- "collapse_sidebar": "Collapse sidebar",
- "expand_sidebar": "Expand sidebar",
- "add_hub_card": "Add a hub",
- "hub_display_name": "Display name",
- "revert_hub_name": "Revert to announced name",
- "search_messages": "Search",
- "search_messages_placeholder": "Search (AND, OR, DATE:2026-06-02)...",
- "search_empty_hint": "Search this room",
- "search_syntax_hint": "Examples: hello world · alice OR bob · DATE:today · DATE:2026-06-02",
- "search_no_results": "No messages match your search",
- "members_search_placeholder": "Search members...",
- "members_search_no_results": "No members match your search.",
- "popout_channel": "Open in new window",
- "new_message_toast": "New message in #{room}",
+ "no_members": "Ei vielä ketään täällä",
+ "show_members": "Näytä jäsenet",
+ "hide_members": "Piilota jäsenet",
+ "discovery_refreshed": "Löydös päivitetty",
+ "collapse_sidebar": "Kutista sivupalkki",
+ "expand_sidebar": "Laajenna sivupalkki",
+ "add_hub_card": "Lisää keskus",
+ "hub_display_name": "Näyttönimi",
+ "revert_hub_name": "Palauta ilmoitettu nimi",
+ "search_messages": "Etsi",
+ "search_messages_placeholder": "Etsi (AND, OR, DATE:2026-06-02)...",
+ "search_empty_hint": "Etsi tästä huoneesta",
+ "search_syntax_hint": "Esimerkkejä: hello world · alice OR bob · DATE:tänään · DATE:2026-06-02",
+ "search_no_results": "Yksikään viesti ei vastaa hakua",
+ "members_search_placeholder": "Hae jäseniä...",
+ "members_search_no_results": "Yksikään jäsen ei vastaa hakua.",
+ "popout_channel": "Avaa uudessa ikkunassa",
+ "new_message_toast": "Uusi viesti #{room}",
"host_users": "käyttäjää",
"host_announce_interval": "Ilmoitusväli (minuuttia)",
"host_announce_interval_hint": "Joka {minutes}. minuutti",
@@ -2715,661 +2715,661 @@
"presence_connection": "{count} yhteystapahtumaa"
},
"rncp": {
- "file_transfer": "File Transfer",
+ "file_transfer": "Tiedostonsiirto",
"title": "RNCP - Reticulum Network Copy",
- "description": "Send, listen, or fetch files over Reticulum using RNCP (chunked transfers, optional compression).",
- "usage_steps": "How to use RNCP:",
- "step_1": "1. To **receive** a file, go to the **Listen** tab, enter allowed identity hashes (who can send to you), and click **Start Listening**.",
- "step_2": "2. To **send** a file, get the **Destination Hash** of a listening node, enter the **Local File Path**, and click **Send File**.",
- "step_3": "3. To **fetch** a file, get the **Destination Hash** of a node listening with 'Allow Fetch' enabled, enter the **Remote File Path**, and click **Fetch File**.",
- "send_file": "Send File",
- "fetch_file": "Fetch File",
+ "description": "Lähetä, kuuntele tai nouda tiedostoja Reticulumin yli käyttäen RNCP:tä (palapalasiirrot, valinnainen pakkaus).",
+ "usage_steps": "RNCP:n käyttöohjeet:",
+ "step_1": "1. **Vastaanottaaksesi** tiedoston, siirry **Kuuntele**-välilehdelle, anna sallitut identiteettihajautusarvot (ketkä voivat lähettää sinulle) ja napsauta **Aloita kuuntelu**.",
+ "step_2": "2. **Lähettääksesi** tiedoston, hanki kuuntelevan solmun **Kohdehajautusarvo**, anna **Paikallinen tiedostopolku** ja napsauta **Lähetä tiedosto**.",
+ "step_3": "3. **Noutaaksesi** tiedoston, hanki kuuntelevan solmun, jossa 'Salli nouto' on käytössä, **Kohdehajautusarvo**, anna **Etätiedostopolku** ja napsauta **Nouda tiedosto**.",
+ "send_file": "Lähetä tiedosto",
+ "fetch_file": "Nouda tiedosto",
"listen": "Kuuntele",
"destination_hash": "Kohteen tiiviste",
- "file_path": "File Path",
- "timeout_seconds": "Timeout (seconds)",
- "disable_compression": "Disable compression",
+ "file_path": "Tiedostopolku",
+ "timeout_seconds": "Aikakatkaisu (sekuntia)",
+ "disable_compression": "Poista pakkaus käytöstä",
"cancel": "Peru",
- "progress": "Progress",
+ "progress": "Edistyminen",
"invalid_hash": "Kohteen tiiviste ei kelpaa!",
- "provide_file_path": "Please provide a file path!",
- "file_sent_successfully": "File sent successfully. Transfer ID: {id}",
- "failed_to_send": "Failed to send file",
- "remote_file_path": "Remote File Path",
- "save_path_optional": "Save Path (optional)",
- "save_path_placeholder": "Leave empty for current directory",
- "allow_overwrite": "Allow overwrite",
- "provide_remote_file_path": "Please provide a remote file path!",
- "file_fetched_successfully": "File fetched successfully. Saved to: {path}",
- "failed_to_fetch": "Failed to fetch file",
- "allowed_hashes": "Allowed Identity Hashes (one per line)",
- "fetch_jail_path": "Fetch Jail Path (optional)",
- "allow_fetch": "Allow fetch",
- "start_listening": "Start Listening",
- "stop_listening": "Stop Listening",
- "listening_on": "Listening on:",
- "provide_allowed_hash": "Please provide at least one allowed identity hash!",
- "failed_to_start_listener": "Failed to start listener",
- "failed_to_stop_listener": "Failed to stop listener",
- "browse_file": "Browse",
- "browse_folder": "Choose folder",
- "receive_folder": "Received files folder",
- "open_folder": "Open folder",
- "show_in_folder": "Show in folder",
- "received_file": "File received",
- "receive_failed": "Receive failed",
- "send_complete": "Send complete",
- "fetch_complete": "Fetch complete",
+ "provide_file_path": "Anna tiedostopolku!",
+ "file_sent_successfully": "Tiedosto lähetetty onnistuneesti. Siirron tunnus: {id}",
+ "failed_to_send": "Tiedoston lähetys epäonnistui",
+ "remote_file_path": "Etätiedostopolku",
+ "save_path_optional": "Tallennuspolku (valinnainen)",
+ "save_path_placeholder": "Jätä tyhjäksi nykyiselle hakemistolle",
+ "allow_overwrite": "Salli ylikirjoitus",
+ "provide_remote_file_path": "Anna etätiedostopolku!",
+ "file_fetched_successfully": "Tiedosto noudettu onnistuneesti. Tallennettu kohteeseen: {path}",
+ "failed_to_fetch": "Tiedoston nouto epäonnistui",
+ "allowed_hashes": "Sallitut identiteettitiivisteet (yksi per rivi)",
+ "fetch_jail_path": "Noutovankilan polku (valinnainen)",
+ "allow_fetch": "Salli nouto",
+ "start_listening": "Aloita kuuntelu",
+ "stop_listening": "Lopeta kuuntelu",
+ "listening_on": "Kuunnellaan:",
+ "provide_allowed_hash": "Anna vähintään yksi sallittu identiteettihajautusarvo!",
+ "failed_to_start_listener": "Kuuntelijan käynnistys epäonnistui",
+ "failed_to_stop_listener": "Kuuntelijan pysäytys epäonnistui",
+ "browse_file": "Selaa",
+ "browse_folder": "Valitse kansio",
+ "receive_folder": "Vastaanotettujen tiedostojen kansio",
+ "open_folder": "Avaa kansio",
+ "show_in_folder": "Näytä kansiossa",
+ "received_file": "Tiedosto vastaanotettu",
+ "receive_failed": "Vastaanotto epäonnistui",
+ "send_complete": "Lähetys valmis",
+ "fetch_complete": "Nouto valmis",
"transfer_status": "Tila",
- "listening_active_background": "Listening continues in the background. Return here to manage or stop.",
- "web_path_hint": "Browsers cannot expose full file paths. Use the desktop app to browse, or paste the full path to the file on this machine.",
- "web_save_path_prompt": "Enter the absolute folder path on the machine running MeshChat (server) where the fetched file should be saved:"
+ "listening_active_background": "Kuuntelu jatkuu taustalla. Palaa tähän hallitaksesi tai lopettaaksesi.",
+ "web_path_hint": "Selaimet eivät voi näyttää täydellisiä tiedostopolkuja. Käytä työpöytäsovellusta selataksesi tai liitä koko polku tiedostoon tällä koneella.",
+ "web_save_path_prompt": "Anna absoluuttinen kansiopolku MeshChatia (palvelinta) suorittavalla koneella, johon noudettu tiedosto tallennetaan:"
},
"rnsh": {
- "remote_shell": "Remote shell",
- "usage_title": "Usage",
- "usage_hint": "Create connect or listen sessions, then manage them on the Sessions tab. Output streams live while MeshChatX is running.",
- "tab_sessions": "Sessions",
- "tab_sessions_short": "Sessions",
- "tab_connect": "Connect",
- "tab_connect_short": "Connect",
+ "remote_shell": "Etäkuori",
+ "usage_title": "Käyttö",
+ "usage_hint": "Luo yhteys- tai kuunteluistuntoja, hallitse niitä Istunnot-välilehdellä. Tulostevirrat ovat aktiivisia MeshChatX:n ollessa käynnissä.",
+ "tab_sessions": "Istunnot",
+ "tab_sessions_short": "Istunnot",
+ "tab_connect": "Yhdistä",
+ "tab_connect_short": "Yhdistä",
"tab_listen": "Kuuntele",
"tab_listen_short": "Kuuntele",
- "fullscreen": "Full screen",
- "exit_fullscreen": "Exit full screen",
- "show_sessions": "Sessions",
- "hide_sessions": "Back to terminal",
- "sessions": "Sessions",
+ "fullscreen": "Koko näyttö",
+ "exit_fullscreen": "Poistu koko näytöstä",
+ "show_sessions": "Istunnot",
+ "hide_sessions": "Takaisin terminaaliin",
+ "sessions": "Istunnot",
"refresh": "Virkistä",
- "name": "Session name",
- "name_placeholder": "Ops shell",
+ "name": "Istunnon nimi",
+ "name_placeholder": "Ops-kuori",
"listen_mode": "Kuuntele",
- "destination_hash": "Destination hash",
+ "destination_hash": "Kohdetiiviste",
"destination_placeholder": "7a55144adf826958a9529a3bcf08b149",
- "allowed_hashes": "Allowed identity hashes",
- "allowed_hashes_placeholder": "One hash per line",
- "remote_command": "Remote command",
- "default_command": "Default command",
+ "allowed_hashes": "Sallitut identiteettitiivisteet",
+ "allowed_hashes_placeholder": "Yksi tiiviste riviä kohden",
+ "remote_command": "Etäkomento",
+ "default_command": "Oletuskomento",
"command_placeholder": "/bin/bash --login",
- "mirror_exit_code": "Mirror exit code (-m)",
- "no_id": "No local identity (-N)",
- "create_and_start": "Create and start",
- "session_output": "Session output",
- "no_command_yet": "No command started yet",
- "start": "Start",
+ "mirror_exit_code": "Peilaa poistumiskoodi (-m)",
+ "no_id": "Ei paikallista identiteettiä (-N)",
+ "create_and_start": "Luo ja käynnistä",
+ "session_output": "Istunnon tuloste",
+ "no_command_yet": "Komentoja ei ole vielä käynnistetty",
+ "start": "Käynnistä",
"stop": "Pysäytä",
"clear": "Tyhjää",
"remove": "Poista",
- "send_line": "Send",
- "command_input_placeholder": "Type command input...",
+ "send_line": "Lähetä",
+ "command_input_placeholder": "Kirjoita komentotulo...",
"status_running": "Käynnissä",
"status_stopped": "Pysäytetty",
"status_failed": "Epäonnistunut",
- "no_sessions": "No sessions created yet.",
- "unnamed_session": "Unnamed session",
- "select_or_create_session": "Select or create a session to begin.",
- "no_output_yet": "No output yet.",
- "destination_required": "Destination hash is required for connect mode.",
- "session_created": "Session created",
- "session_started": "Session started",
- "session_stopped": "Session stopped",
- "session_removed": "Session removed",
- "output_cleared": "Output cleared",
+ "no_sessions": "Istuntoja ei ole vielä luotu.",
+ "unnamed_session": "Nimeämätön istunto",
+ "select_or_create_session": "Valitse tai luo istunto aloittaaksesi.",
+ "no_output_yet": "Ei vielä tulostetta.",
+ "destination_required": "Kohdetiiviste vaaditaan yhteystilassa.",
+ "session_created": "Istunto luotu",
+ "session_started": "Istunto käynnistetty",
+ "session_stopped": "Istunto pysäytetty",
+ "session_removed": "Istunto poistettu",
+ "output_cleared": "Tuloste tyhjennetty",
"title": "RNSH - Reticulum Remote Shell",
- "description": "Manage persistent rnsh sessions",
- "failed_to_load_sessions": "Failed to load RNSH sessions",
- "failed_to_create_session": "Failed to create RNSH session",
- "failed_to_start_session": "Failed to start RNSH session",
- "failed_to_stop_session": "Failed to stop RNSH session",
- "failed_to_remove_session": "Failed to remove RNSH session",
- "failed_to_clear_output": "Failed to clear RNSH output",
- "failed_to_send_input": "Failed to send RNSH input",
- "listening_on": "Listening on",
- "waiting_for_address": "Waiting for listener address...",
+ "description": "Hallitse pysyviä rnsh-istuntoja",
+ "failed_to_load_sessions": "RNSH-istuntojen lataus epäonnistui",
+ "failed_to_create_session": "RNSH-istunnon luonti epäonnistui",
+ "failed_to_start_session": "RNSH-istunnon käynnistys epäonnistui",
+ "failed_to_stop_session": "RNSH-istunnon pysäytys epäonnistui",
+ "failed_to_remove_session": "RNSH-istunnon poisto epäonnistui",
+ "failed_to_clear_output": "RNSH-tulosteen tyhjennys epäonnistui",
+ "failed_to_send_input": "RNSH-syötteen lähetys epäonnistui",
+ "listening_on": "Kuuntelee",
+ "waiting_for_address": "Odotetaan kuuntelijan osoitetta...",
"copy_address": "Kopioi",
- "address_copied": "Address copied to clipboard",
+ "address_copied": "Osoite kopioitu leikepöydälle",
"failed_to_copy_address": "Kopiointi epäonnistui",
- "config_dir": "Reticulum config directory",
- "config_dir_placeholder": "Defaults to the app's Reticulum config",
- "config_dir_hint": "Leave blank to share the MeshChatX Reticulum instance. Override only to use a separate Reticulum config directory."
+ "config_dir": "Reticulumin asetushakemisto",
+ "config_dir_placeholder": "Oletuksena sovelluksen Reticulum-asetukset",
+ "config_dir_hint": "Jätä tyhjäksi jakaaksesi MeshChatX Reticulum -instanssin. Ohita vain käyttääksesi erillistä Reticulum-asetushakemistoa."
},
"rnprobe": {
- "network_diagnostics": "Network Diagnostics",
- "title": "RNProbe - Destination Probe",
- "description": "Send probes with configurable size to measure RTT and delivery.",
+ "network_diagnostics": "Verkkodiagnostiikka",
+ "title": "RNProbe - Kohdekoetus",
+ "description": "Lähetä mittauspaketteja säädettävällä koolla RTT:n ja toimituksen mittaamiseksi.",
"destination_hash": "Kohteen tiiviste",
- "full_destination_name": "Full Destination Name",
- "probe_size_bytes": "Probe Size (bytes)",
- "number_of_probes": "Number of Probes",
- "wait_between_probes": "Wait Between Probes (seconds)",
- "start_probe": "Start Probe",
+ "full_destination_name": "Täysi kohdenimi",
+ "probe_size_bytes": "Koettimen koko (tavua)",
+ "number_of_probes": "Mittausten määrä",
+ "wait_between_probes": "Odota koetusten välillä (sekuntia)",
+ "start_probe": "Aloita koetus",
"stop": "Pysäytä",
"clear_results": "Tyhjää tulokset",
- "summary": "Summary",
+ "summary": "Yhteenveto",
"sent": "Lähetetty",
- "delivered": "Delivered",
- "timeouts": "Timeouts",
+ "delivered": "Toimitettu",
+ "timeouts": "Aikakatkaisut",
"failed": "Epäonnistunut",
- "probe_results": "Probe Results",
- "probe_responses_realtime": "Probe responses in real time",
- "no_probes_yet": "No probes yet. Start a probe to test connectivity.",
- "probe_number": "Probe #{number}",
- "bytes": "bytes",
+ "probe_results": "Mittaustulokset",
+ "probe_responses_realtime": "Mittausvastaukset reaaliajassa",
+ "no_probes_yet": "Ei vielä mittauksia. Aloita mittaus testataksesi yhteyttä.",
+ "probe_number": "Mittaus #{number}",
+ "bytes": "tavua",
"hops": "Hypyt",
"rtt": "RTT",
"rssi": "RSSI",
"snr": "SNR",
"quality": "Laatu",
- "timeout": "Timeout",
+ "timeout": "Aikakatkaisu",
"invalid_hash": "Kohteen tiiviste ei kelpaa!",
- "provide_full_name": "Please provide a full destination name!",
- "failed_to_probe": "Failed to probe destination"
+ "provide_full_name": "Anna täydellinen kohdenimi!",
+ "failed_to_probe": "Kohteen mittaus epäonnistui"
},
"rnstatus": {
- "network_diagnostics": "Network Diagnostics",
- "title": "RNStatus - Network Status",
- "description": "Per-interface statistics and link status from your RNS instance.",
+ "network_diagnostics": "Verkkodiagnostiikka",
+ "title": "RNStatus - Verkon tila",
+ "description": "Rajapintakohtaiset tilastot ja linkkitila RNS-esiintymästäsi.",
"refresh": "Virkistä",
- "include_link_stats": "Include Link Stats",
- "sort_by": "Sort by:",
- "none": "None",
- "bitrate": "Bitrate",
- "rx_bytes": "RX Bytes",
- "tx_bytes": "TX Bytes",
- "total_traffic": "Total Traffic",
+ "include_link_stats": "Sisällytä linkkitilastot",
+ "sort_by": "Lajittele:",
+ "none": "Ei mitään",
+ "bitrate": "Bittinopeus",
+ "rx_bytes": "Vastaanotetut tavut",
+ "tx_bytes": "Lähetetyt tavut",
+ "total_traffic": "Kokonaisliikenne",
"announces": "Kuulutukset",
- "active_links": "Active Links: {count}",
- "no_interfaces_found": "No interfaces found. Click refresh to load status.",
- "mode": "Mode",
- "rx_packets": "RX Packets",
- "tx_packets": "TX Packets",
+ "active_links": "Aktiiviset linkit: {count}",
+ "no_interfaces_found": "Liitäntöjä ei löytynyt. Napsauta Päivitä ladataksesi tilan.",
+ "mode": "Tila",
+ "rx_packets": "Vastaanotetut paketit",
+ "tx_packets": "Lähetetyt paketit",
"clients": "Asiakkaat",
- "peers_reachable": "reachable",
- "noise_floor": "Noise Floor",
- "interference": "Interference",
- "cpu_load": "CPU Load",
- "cpu_temp": "CPU Temp",
- "memory_load": "Memory Load",
- "battery": "Battery",
- "network": "Network",
- "incoming_announces": "Incoming Announces",
- "outgoing_announces": "Outgoing Announces",
- "airtime": "Airtime",
- "channel_load": "Channel Load"
+ "peers_reachable": "tavoitettavissa",
+ "noise_floor": "Kohinataso",
+ "interference": "Häiriö",
+ "cpu_load": "CPU-kuorma",
+ "cpu_temp": "CPU-lämpötila",
+ "memory_load": "Muistikuorma",
+ "battery": "Akku",
+ "network": "Verkko",
+ "incoming_announces": "Saapuvat ilmoitukset",
+ "outgoing_announces": "Lähtevät ilmoitukset",
+ "airtime": "Ilma-aika",
+ "channel_load": "Kanavakuorma"
},
"translator": {
- "text_translation": "Text Translation",
+ "text_translation": "Tekstin käännös",
"title": "Kääntäjä",
- "description": "Translate text via a LibreTranslate server or local Argos Translate.",
+ "description": "Käännä tekstiä LibreTranslate-palvelimen tai paikallisen Argos Translate -sovelluksen kautta.",
"argos_translate": "Argos Translate",
"libretranslate": "LibreTranslate",
- "api_server": "LibreTranslate API Server",
- "api_server_description": "Enter the base URL of your LibreTranslate server (e.g., https://libretranslate.com or http://localhost:5000).",
- "api_key_optional": "LibreTranslate API key (optional)",
- "api_key_placeholder": "Leave empty unless your provider requires one",
- "api_key_description": "If required, LibreTranslate expects this as api_key in the JSON translate body and optionally on the languages request. Omit for typical self-hosted instances.",
- "source_language": "Source Language",
- "auto_detect": "Auto-detect",
- "target_language": "Target Language",
- "select_target_language": "Select target language",
- "argos_not_detected": "Argos Translate not detected",
- "argos_not_detected_desc": "To use local translation, you must install the Argos Translate package using one of the following methods:",
- "method_pip_venv": "Method 1: pip (venv)",
- "method_pipx": "Method 2: pipx",
- "note_restart_required": "Note: After installation, you may need to restart the application and install language packages via the Argos Translate CLI.",
- "no_language_packages": "No language packages detected",
- "no_language_packages_desc": "Argos Translate is installed but no language packages are available. Install language packages using one of the following commands:",
- "install_all_languages": "Install all languages",
- "install_specific_pair": "Install specific language pair (example: English to German)",
- "after_install_note": "After installing language packages, click \"Refresh Languages\" to reload available languages.",
- "text_to_translate": "Text to Translate",
- "enter_text_placeholder": "Enter text to translate...",
- "translate": "Translate",
- "swap": "Swap",
+ "api_server": "LibreTranslate API-palvelin",
+ "api_server_description": "Syötä LibreTranslate-palvelimesi perus-URL (esim. https://libretranslate.com tai http://localhost:5000).",
+ "api_key_optional": "LibreTranslate API-avain (valinnainen)",
+ "api_key_placeholder": "Jätä tyhjäksi, ellei palveluntarjoajasi vaadi sitä",
+ "api_key_description": "Tarvittaessa LibreTranslate odottaa tätä api_key-parametrina JSON-käännösrungossa ja valinnaisesti kielipyynnössä. Jätä pois tyypillisissä itse isännöidyissä instansseissa.",
+ "source_language": "Lähdekieli",
+ "auto_detect": "Automaattinen tunnistus",
+ "target_language": "Kohdekieli",
+ "select_target_language": "Valitse kohdekieli",
+ "argos_not_detected": "Argos Translatea ei havaittu",
+ "argos_not_detected_desc": "Käyttääksesi paikallista käännöstä, sinun on asennettava Argos Translate -paketti jollakin seuraavista tavoista:",
+ "method_pip_venv": "Menetelmä 1: pip (venv)",
+ "method_pipx": "Menetelmä 2: pipx",
+ "note_restart_required": "Huomautus: Asennuksen jälkeen saatat joutua käynnistämään sovelluksen uudelleen ja asentamaan kielipaketit Argos Translate -komennoriviliittymän kautta.",
+ "no_language_packages": "Kielipaketteja ei havaittu",
+ "no_language_packages_desc": "Argos Translate on asennettu, mutta kielipaketteja ei ole saatavilla. Asenna kielipaketit jollakin seuraavista komennoista:",
+ "install_all_languages": "Asenna kaikki kielet",
+ "install_specific_pair": "Asenna tietty kielipari (esimerkki: englannista saksaksi)",
+ "after_install_note": "Kielipakettien asennuksen jälkeen napsauta \"Päivitä kielet\" ladataksesi käytettävissä olevat kielet.",
+ "text_to_translate": "Käännettävä teksti",
+ "enter_text_placeholder": "Syötä käännettävä teksti...",
+ "translate": "Käännä",
+ "swap": "Vaihda",
"clear": "Tyhjää",
- "translation": "Translation",
+ "translation": "Käännös",
"source": "Lähde",
- "detected": "Detected",
- "available_languages": "Available Languages",
- "languages_loaded_from": "Languages are loaded from LibreTranslate API or Argos Translate packages.",
- "refresh_languages": "Refresh Languages",
- "failed_load_languages": "Failed to load languages. Make sure LibreTranslate is running or Argos Translate is installed.",
- "failed_translate": "Translation failed. Make sure LibreTranslate is running or Argos Translate is installed.",
- "select_languages_warning": "Please select both source and target languages.",
- "auto_detect_not_supported": "Auto-detection is not supported with Argos Translate. Please select a source language.",
+ "detected": "Havaittu",
+ "available_languages": "Käytettävissä olevat kielet",
+ "languages_loaded_from": "Kielet ladataan LibreTranslate API:sta tai Argos Translate -paketeista.",
+ "refresh_languages": "Päivitä kielet",
+ "failed_load_languages": "Kielten lataaminen epäonnistui. Varmista, että LibreTranslate on käynnissä tai Argos Translate on asennettu.",
+ "failed_translate": "Käännös epäonnistui. Varmista, että LibreTranslate on käynnissä tai Argos Translate on asennettu.",
+ "select_languages_warning": "Valitse sekä lähde- että kohdekieli.",
+ "auto_detect_not_supported": "Automaattinen tunnistus ei ole tuettu Argos Translate -sovelluksella. Valitse lähdekieli.",
"copied_to_clipboard": "Kopioitu leikepöydälle"
},
"call": {
- "phone": "Phone",
- "voicemail": "Voicemail",
+ "phone": "Puhelin",
+ "voicemail": "Puheposti",
"settings": "Asetukset",
- "unknown": "Unknown",
- "call_ended": "Call Ended",
- "call_declined": "Call Declined",
- "initiation": "Initiating...",
- "send_to_voicemail": "Send to Voicemail",
- "incoming_call": "Incoming Call...",
- "busy": "Busy...",
- "rejected": "Rejected...",
- "calling": "Calling...",
- "available": "Available...",
- "ringing": "Ringing...",
- "connecting": "Connecting...",
- "establishing_link": "Establishing link...",
- "connected": "Connected",
- "accept": "Accept",
- "decline": "Decline",
- "hangup": "Hangup",
- "answer_call": "Answer Call",
- "decline_call": "Decline Call",
- "hangup_call": "Hangup Call",
- "mute_mic": "Mute Mic",
- "unmute_mic": "Unmute Mic",
- "mute_speaker": "Mute Speaker",
- "unmute_speaker": "Unmute Speaker",
+ "unknown": "Tuntematon",
+ "call_ended": "Puhelu päättyi",
+ "call_declined": "Puhelu hylätty",
+ "initiation": "Aloitetaan...",
+ "send_to_voicemail": "Lähetä vastaajaan",
+ "incoming_call": "Saapuva puhelu...",
+ "busy": "Varattu...",
+ "rejected": "Hylätty...",
+ "calling": "Soitetaan...",
+ "available": "Käytettävissä...",
+ "ringing": "Soittaa...",
+ "connecting": "Yhdistetään...",
+ "establishing_link": "Muodostetaan yhteyttä...",
+ "connected": "Yhdistetty",
+ "accept": "Hyväksy",
+ "decline": "Hylkää",
+ "hangup": "Lopeta",
+ "answer_call": "Vastaa puheluun",
+ "decline_call": "Hylkää puhelu",
+ "hangup_call": "Lopeta puhelu",
+ "mute_mic": "Mykistä mikki",
+ "unmute_mic": "Ota mikrofoni käyttöön",
+ "mute_speaker": "Mykistä kaiutin",
+ "unmute_speaker": "Ota kaiutin käyttöön",
"telephone": "Puhelin",
- "enter_identity_hash_to_call": "Enter an identity to call.",
+ "enter_identity_hash_to_call": "Syötä identiteetti, johon soittaa.",
"identity_hash": "Identiteetin tiiviste",
- "call_history": "Call History",
- "call_back": "Call Back",
- "no_voicemails": "No Voicemails",
- "voicemails_will_appear_here": "When people leave you messages, they'll show up here.",
- "voicemail_inbox": "Voicemail Inbox",
+ "call_history": "Puheluhistoria",
+ "call_back": "Soita takaisin",
+ "no_voicemails": "Ei vastaajaviestejä",
+ "voicemails_will_appear_here": "Kun ihmiset jättävät sinulle viestejä, ne näkyvät täällä.",
+ "voicemail_inbox": "Puhepostin saapuneet",
"messages": "Viestit",
"delete": "Poista",
- "voicemail_settings": "Voicemail Settings",
- "dependencies_missing": "Dependencies Missing",
- "voicemail_requires_espeak": "Voicemail requires `espeak-ng` to generate greetings. Please install it on your system.",
- "enable_voicemail": "Enable Voicemail",
- "enable_voicemail_description": "Accept calls automatically and record messages",
- "greeting_message": "Greeting Message",
- "enter_greeting_text": "Enter greeting text...",
- "greeting_text_description": "This text will be converted to speech using eSpeak NG.",
- "tts_speed": "TTS Speed",
- "tts_pitch": "TTS Pitch",
- "tts_voice": "TTS Voice",
- "tts_word_gap": "TTS Word Gap",
- "save_and_generate": "Save & Generate",
- "generating": "Generating...",
- "preview_greeting": "Preview Greeting",
- "stop_preview": "Stop Preview",
- "answer_delay_seconds": "Answer Delay (s)",
- "max_recording_seconds": "Max Recording (s)",
- "recording_voicemail": "Recording Voicemail",
- "call_status": "Call Status",
- "call_recording": "Call Recorder",
- "call_recording_description": "Record voice calls to storage",
- "recordings": "Recordings",
- "no_recordings": "No recordings found",
- "remote_rx": "Remote (RX)",
- "local_tx": "Local (TX)",
- "download_rx": "Download RX",
- "download_tx": "Download TX",
- "minimize": "Minimize",
+ "voicemail_settings": "Puhepostin asetukset",
+ "dependencies_missing": "Riippuvuuksia puuttuu",
+ "voicemail_requires_espeak": "Puheposti vaatii `espeak-ng`:n tervehdysten luomiseen. Asenna se järjestelmääsi.",
+ "enable_voicemail": "Ota käyttöön vastaaja",
+ "enable_voicemail_description": "Hyväksy puhelut automaattisesti ja tallenna viestit",
+ "greeting_message": "Tervehdysviesti",
+ "enter_greeting_text": "Syötä tervehdysteksti...",
+ "greeting_text_description": "Tämä teksti muunnetaan puheeksi eSpeak NG:n avulla.",
+ "tts_speed": "TTS-nopeus",
+ "tts_pitch": "TTS-sävelkorkeus",
+ "tts_voice": "TTS-ääni",
+ "tts_word_gap": "TTS-sananväli",
+ "save_and_generate": "Tallenna ja luo",
+ "generating": "Luodaan...",
+ "preview_greeting": "Esikatsele tervehdystä",
+ "stop_preview": "Lopeta esikatselu",
+ "answer_delay_seconds": "Vastausviive (s)",
+ "max_recording_seconds": "Max. tallennus (s)",
+ "recording_voicemail": "Tallennetaan vastaajaviestiä",
+ "call_status": "Puhelun tila",
+ "call_recording": "Puhelun tallennus",
+ "call_recording_description": "Tallenna äänipuhelut tallennustilaan",
+ "recordings": "Tallenteet",
+ "no_recordings": "Tallenteita ei löydy",
+ "remote_rx": "Etä (RX)",
+ "local_tx": "Paikallinen (TX)",
+ "download_rx": "Lataa RX",
+ "download_tx": "Lataa TX",
+ "minimize": "Pienennä",
"active": "Käytössä",
- "default_quality": "Default Quality",
+ "default_quality": "Oletuslaatu",
"active_call": "Käynnissä oleva puhelu",
"status": "Tila",
- "failed_to_answer_call": "Failed to answer call",
- "failed_to_hangup_call": "Failed to hangup call",
- "failed_to_toggle_microphone": "Failed to toggle microphone",
- "failed_to_toggle_speaker": "Failed to toggle speaker",
- "failed_to_switch_audio_profile": "Failed to switch audio profile",
- "failed_to_initiate_call": "Failed to initiate call",
- "enter_identity_hash_to_call_error": "Enter an identity to call",
- "failed_to_save_settings": "Failed to save settings",
- "do_not_disturb": "Do Not Disturb",
- "load_more": "Load More",
- "go_to_phone_page": "Go to Phone Page",
- "search_history": "Search history...",
- "allow_calls_from_contacts_only": "Only allow calls from contacts",
- "settings_saved": "Settings saved",
- "greeting_generated_successfully": "Greeting generated successfully",
- "failed_to_generate_greeting": "Failed to generate greeting",
- "no_greeting_audio_found": "No greeting audio found. Please generate one first.",
- "voicemail_deleted": "Voicemail deleted",
- "failed_to_delete_voicemail": "Failed to delete voicemail",
- "ringtone": "Ringtone",
- "ringtone_settings": "Ringtone Settings",
- "enable_custom_ringtone": "Enable Custom Ringtone",
- "enable_custom_ringtone_description": "Play a custom audio file for all incoming calls",
- "upload_ringtone": "Upload Ringtone",
- "uploading_ringtone": "Uploading Ringtone...",
- "no_custom_ringtone_uploaded": "No custom ringtone uploaded",
- "supports_audio_formats": "Supports MP3, OGG, WAV, M4A, FLAC. Will be converted to Opus.",
- "preview_ringtone": "Preview Ringtone",
- "remove_ringtone": "Remove Ringtone",
- "ringtone_uploaded_successfully": "Ringtone uploaded successfully",
- "failed_to_upload_ringtone": "Failed to upload ringtone",
- "ringtone_deleted": "Ringtone deleted",
- "failed_to_delete_ringtone": "Failed to delete ringtone",
- "no_ringtone_audio_found": "No ringtone audio found. Please upload one first.",
- "ringtone_volume": "Ringtone Volume",
- "default_ringtone": "Default Ringtone",
- "ringtone_for_non_contacts": "Ringtone for callers not in your contacts",
- "primary_system_default": "Primary (System Default)",
- "random": "Random",
- "edit_contact": "Edit Contact",
- "add_contact": "Add Contact",
- "contact_name": "Contact Name",
- "preferred_ringtone": "Preferred Ringtone",
- "default_global_setting": "Default (Global Setting)",
- "uploaded_ringtones": "Uploaded Ringtones",
- "save_contact": "Save Contact",
- "primary_ringtone_set": "Primary ringtone set",
- "failed_to_set_primary_ringtone": "Failed to set primary ringtone",
- "failed_to_update_ringtone_name": "Failed to update ringtone name",
- "failed_to_play_ringtone": "Failed to play ringtone",
- "failed_to_play_voicemail": "Failed to play voicemail",
- "web_audio_not_available": "Web audio not available",
- "no_audio_input_found": "No input audio device found. Check microphone and permissions.",
- "microphone_permission_denied": "Microphone permission denied. Allow access and try again.",
- "failed_to_update_dnd": "Failed to update Do Not Disturb status",
- "failed_to_update_call_settings": "Failed to update call settings",
- "failed_to_update_recording_status": "Failed to update call recording status",
- "call_history_cleared": "Call history cleared",
- "failed_to_clear_call_history": "Failed to clear call history",
- "identity_banished": "Identity banished",
- "failed_to_banish_identity": "Failed to banish identity",
- "name_and_hash_required": "Name and identity hash required",
- "contact_updated": "Contact updated",
- "contact_added": "Contact added",
- "contact_deleted": "Contact deleted",
- "failed_to_delete_contact": "Failed to delete contact",
- "hash_copied": "Hash copied to clipboard",
- "failed_to_copy_hash": "Failed to copy hash",
- "greeting_uploaded_successfully": "Greeting uploaded successfully",
- "greeting_deleted": "Greeting deleted",
- "failed_to_delete_greeting": "Failed to delete greeting",
- "failed_to_start_recording_greeting": "Failed to start recording greeting",
- "greeting_recorded_from_mic": "Greeting recorded from mic",
- "failed_to_stop_recording_greeting": "Failed to stop recording greeting",
- "failed_to_load_recording": "Failed to load recording audio",
- "recording_deleted": "Recording deleted",
- "failed_to_delete_recording": "Failed to delete recording",
- "call_sent_to_voicemail": "Call sent to voicemail",
- "failed_to_send_to_voicemail": "Failed to send call to voicemail",
- "failed_load_audio_edit": "Failed to load audio for editing",
- "ringtone_saved": "Ringtone saved successfully",
- "failed_save_ringtone": "Failed to save edited ringtone"
+ "failed_to_answer_call": "Puheluun vastaaminen epäonnistui",
+ "failed_to_hangup_call": "Puhelun lopettaminen epäonnistui",
+ "failed_to_toggle_microphone": "Mikrofonin vaihtaminen epäonnistui",
+ "failed_to_toggle_speaker": "Kaiuttimen vaihtaminen epäonnistui",
+ "failed_to_switch_audio_profile": "Ääniprofiilin vaihtaminen epäonnistui",
+ "failed_to_initiate_call": "Puhelun aloittaminen epäonnistui",
+ "enter_identity_hash_to_call_error": "Syötä identiteetti, johon soittaa",
+ "failed_to_save_settings": "Asetusten tallentaminen epäonnistui",
+ "do_not_disturb": "Älä häiritse",
+ "load_more": "Lataa lisää",
+ "go_to_phone_page": "Siirry puhelinsivulle",
+ "search_history": "Hae historiaa...",
+ "allow_calls_from_contacts_only": "Salli puhelut vain yhteystiedoilta",
+ "settings_saved": "Asetukset tallennettu",
+ "greeting_generated_successfully": "Tervehdys luotu onnistuneesti",
+ "failed_to_generate_greeting": "Tervehdyksen luominen epäonnistui",
+ "no_greeting_audio_found": "Tervehdysääntä ei löydy. Luo ensin yksi.",
+ "voicemail_deleted": "Puheposti poistettu",
+ "failed_to_delete_voicemail": "Vastaajaviestin poistaminen epäonnistui",
+ "ringtone": "Soittoääni",
+ "ringtone_settings": "Soittoäänen asetukset",
+ "enable_custom_ringtone": "Ota käyttöön mukautettu soittoääni",
+ "enable_custom_ringtone_description": "Toista mukautettu äänitiedosto kaikille saapuville puheluille",
+ "upload_ringtone": "Lataa soittoääni",
+ "uploading_ringtone": "Ladataan soittoääntä...",
+ "no_custom_ringtone_uploaded": "Ei ladattua mukautettua soittoääntä",
+ "supports_audio_formats": "Tukee MP3, OGG, WAV, M4A, FLAC -muotoja. Muunnetaan Opus-muotoon.",
+ "preview_ringtone": "Esikatsele soittoääntä",
+ "remove_ringtone": "Poista soittoääni",
+ "ringtone_uploaded_successfully": "Soittoääni ladattu onnistuneesti",
+ "failed_to_upload_ringtone": "Soittoäänen lataaminen epäonnistui",
+ "ringtone_deleted": "Soittoääni poistettu",
+ "failed_to_delete_ringtone": "Soittoäänen poistaminen epäonnistui",
+ "no_ringtone_audio_found": "Soittoääntä ei löydy. Lataa ensin yksi.",
+ "ringtone_volume": "Soittoäänen äänenvoimakkuus",
+ "default_ringtone": "Oletussoittoääni",
+ "ringtone_for_non_contacts": "Soittoääni soittajille, jotka eivät ole yhteystiedoissasi",
+ "primary_system_default": "Ensisijainen (järjestelmän oletus)",
+ "random": "Satunnainen",
+ "edit_contact": "Muokkaa yhteystietoa",
+ "add_contact": "Lisää yhteystieto",
+ "contact_name": "Yhteystiedon nimi",
+ "preferred_ringtone": "Ensisijainen soittoääni",
+ "default_global_setting": "Oletus (globaali asetus)",
+ "uploaded_ringtones": "Ladatut soittoäänet",
+ "save_contact": "Tallenna yhteystieto",
+ "primary_ringtone_set": "Ensisijainen soittoääni asetettu",
+ "failed_to_set_primary_ringtone": "Ensisijaisen soittoäänen asettaminen epäonnistui",
+ "failed_to_update_ringtone_name": "Soittoäänen nimen päivittäminen epäonnistui",
+ "failed_to_play_ringtone": "Soittoäänen toistaminen epäonnistui",
+ "failed_to_play_voicemail": "Vastaajaviestin toistaminen epäonnistui",
+ "web_audio_not_available": "Verkkoääni ei ole käytettävissä",
+ "no_audio_input_found": "Äänitulolaitetta ei löydy. Tarkista mikrofoni ja käyttöoikeudet.",
+ "microphone_permission_denied": "Mikrofonin käyttöoikeus evätty. Salli pääsy ja yritä uudelleen.",
+ "failed_to_update_dnd": "Älä häiritse -tilan päivittäminen epäonnistui",
+ "failed_to_update_call_settings": "Puheluasetusten päivittäminen epäonnistui",
+ "failed_to_update_recording_status": "Puhelun tallennustilan päivittäminen epäonnistui",
+ "call_history_cleared": "Puheluhistoria tyhjennetty",
+ "failed_to_clear_call_history": "Puheluhistorian tyhjentäminen epäonnistui",
+ "identity_banished": "Identiteetti karkotettu",
+ "failed_to_banish_identity": "Identiteetin karkottaminen epäonnistui",
+ "name_and_hash_required": "Nimi ja identiteettitiiviste vaaditaan",
+ "contact_updated": "Yhteystieto päivitetty",
+ "contact_added": "Yhteystieto lisätty",
+ "contact_deleted": "Yhteystieto poistettu",
+ "failed_to_delete_contact": "Yhteystiedon poistaminen epäonnistui",
+ "hash_copied": "Tiiviste kopioitu leikepöydälle",
+ "failed_to_copy_hash": "Hajautusarvon kopiointi epäonnistui",
+ "greeting_uploaded_successfully": "Tervehdys ladattu onnistuneesti",
+ "greeting_deleted": "Tervehdys poistettu",
+ "failed_to_delete_greeting": "Tervehdyksen poistaminen epäonnistui",
+ "failed_to_start_recording_greeting": "Tervehdyksen tallennuksen aloittaminen epäonnistui",
+ "greeting_recorded_from_mic": "Tervehdys tallennettu mikrofonista",
+ "failed_to_stop_recording_greeting": "Tervehdyksen tallennuksen lopettaminen epäonnistui",
+ "failed_to_load_recording": "Tallenteen äänen lataaminen epäonnistui",
+ "recording_deleted": "Tallenne poistettu",
+ "failed_to_delete_recording": "Tallenteen poistaminen epäonnistui",
+ "call_sent_to_voicemail": "Puhelu ohjattu vastaajaan",
+ "failed_to_send_to_voicemail": "Puhelun lähettäminen vastaajaan epäonnistui",
+ "failed_load_audio_edit": "Äänen lataaminen muokkausta varten epäonnistui",
+ "ringtone_saved": "Soittoääni tallennettu onnistuneesti",
+ "failed_save_ringtone": "Muokatun soittoäänen tallentaminen epäonnistui"
},
"contacts": {
"title": "Yhteystiedot",
- "description": "Manage your contact list and share/import identities.",
- "search_placeholder": "Search contacts...",
- "actions": "Actions",
- "no_contacts": "No contacts found",
- "load_more": "Load more",
- "add_contact": "Add Contact",
- "contact_name_optional": "Contact Name (Optional)",
- "contact_name_placeholder": "e.g. Field Node",
- "hash_or_uri": "LXMF Hash or URI",
- "hash_or_uri_placeholder": "32-char hash, lxmf://..., or lxma://...",
- "paste": "Paste",
+ "description": "Hallitse yhteystietoluetteloasi ja jaa/tuo identiteettejä.",
+ "search_placeholder": "Hae yhteystietoja...",
+ "actions": "Toiminnot",
+ "no_contacts": "Yhteystietoja ei löytynyt",
+ "load_more": "Lataa lisää",
+ "add_contact": "Lisää yhteystieto",
+ "contact_name_optional": "Yhteystiedon nimi (valinnainen)",
+ "contact_name_placeholder": "esim. Field Node",
+ "hash_or_uri": "LXMF-tiiviste tai URI",
+ "hash_or_uri_placeholder": "32-merkin tiiviste, lxmf://... tai lxma://...",
+ "paste": "Liitä",
"failed_load_contacts": "Yhteystietojen lataus epäonnistui",
- "invalid_contact_input": "Invalid input. Use a 32-char hash or lxma:// URI.",
- "contact_already_exists": "Contact already exists",
- "contact_added": "Contact added",
+ "invalid_contact_input": "Virheellinen syöte. Käytä 32-merkin tiivistettä tai lxma://-URI:a.",
+ "contact_already_exists": "Yhteystieto on jo olemassa",
+ "contact_added": "Yhteystieto lisätty",
"failed_add_contact": "Yhteyshenkilön lisääminen epäonnistui",
- "remove_contact": "Remove Contact",
- "remove_contact_confirm": "Remove this contact?",
- "contact_removed": "Contact removed",
- "failed_remove_contact": "Failed to remove contact",
- "share_contact": "Share Contact URI",
- "copy_contact_uri": "Copy Contact URI",
- "contact_uri_copied": "Contact URI copied to clipboard",
- "failed_build_contact_uri": "Could not build a share URI for this contact",
- "share_my_identity": "Share My Identity",
- "identity_uri_copied": "Identity URI copied to clipboard",
- "share": "Share",
+ "remove_contact": "Poista yhteystieto",
+ "remove_contact_confirm": "Poistetaanko tämä yhteystieto?",
+ "contact_removed": "Yhteystieto poistettu",
+ "failed_remove_contact": "Yhteystiedon poisto epäonnistui",
+ "share_contact": "Jaa yhteystiedon URI",
+ "copy_contact_uri": "Kopioi yhteystiedon URI",
+ "contact_uri_copied": "Yhteystiedon URI kopioitu leikepöydälle",
+ "failed_build_contact_uri": "Tälle yhteystiedolle ei voitu luoda jakamis-URI:a",
+ "share_my_identity": "Jaa oma tunnukseni",
+ "identity_uri_copied": "Tunnuksen URI kopioitu leikepöydälle",
+ "share": "Jaa",
"scan_qr": "Lue QR-koodi",
- "scanner_hint": "Point camera at an identity QR code.",
+ "scanner_hint": "Osoita kameraa tunnuksen QR-koodiin.",
"camera_not_supported": "Selain ei tue kameran QR-lukua.",
"camera_permission_denied": "Kameralupa evätty. Salli kameran käyttö.",
"camera_not_found": "Kameraa ei löytynyt.",
"camera_failed": "Kameralukijan käynnistys epäonnistui.",
- "qr_scanned": "QR code scanned",
- "importing_lxma": "Importing LXMA contact...",
- "send_message": "Send Message",
+ "qr_scanned": "QR-koodi skannattu",
+ "importing_lxma": "Tuodaan LXMA-yhteystietoa...",
+ "send_message": "Lähetä viesti",
"call_contact": "Puhelu",
- "export_contacts": "Export",
+ "export_contacts": "Vie",
"import_contacts": "Tuo",
- "export_success": "Contacts exported",
- "export_failed": "Failed to export contacts",
- "import_success": "Imported {added} contact(s)",
- "import_failed": "Failed to import contacts",
- "import_modal_title": "Import Contacts",
- "import_file_hint": "Select a JSON file exported from Contacts.",
- "edit_contact": "Edit Contact",
- "enter_contact_name": "Enter contact name",
- "contact_updated": "Contact updated",
- "failed_update_contact": "Failed to update contact"
+ "export_success": "Yhteystiedot viety",
+ "export_failed": "Yhteystietojen vienti epäonnistui",
+ "import_success": "Tuotu {added} yhteystietoa",
+ "import_failed": "Yhteystietojen tuonti epäonnistui",
+ "import_modal_title": "Tuo yhteystietoja",
+ "import_file_hint": "Valitse JSON-tiedosto, joka on viety Yhteystiedoista.",
+ "edit_contact": "Muokkaa yhteystietoa",
+ "enter_contact_name": "Syötä yhteystiedon nimi",
+ "contact_updated": "Yhteystieto päivitetty",
+ "failed_update_contact": "Yhteystiedon päivitys epäonnistui"
},
"android_storage": {
- "setup_title": "Choose where MeshChatX stores data",
- "setup_desc": "File-manager storage is recommended. You can browse and back up your identity and messages under Android/data/com.meshchatx/files/. The app restarts when you change this during setup.",
- "setup_external_title": "File-manager storage (recommended)",
- "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — visible in many file managers.",
- "setup_internal_title": "Private app storage",
- "setup_internal_desc": "Hidden from file managers; only this app can access it.",
+ "setup_title": "Valitse, mihin MeshChatX tallentaa tiedot",
+ "setup_desc": "Tiedostonhallinnan tallennustila on suositeltava. Voit selata ja varmuuskopioida henkilöllisyytesi ja viestisi polussa Android/data/com.meshchatx/files/. Sovellus käynnistyy uudelleen, kun muutat tätä asennuksen aikana.",
+ "setup_external_title": "Tiedostonhallinnan tallennustila (suositeltava)",
+ "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — näkyvissä monissa tiedostonhallinnoissa.",
+ "setup_internal_title": "Yksityinen sovellustallennus",
+ "setup_internal_desc": "Piilotettu tiedostonhallinnoilta; vain tämä sovellus voi käyttää sitä.",
"setup_continue": "Jatka",
- "upgrade_title": "Move data to file-manager storage?",
- "upgrade_desc": "Your MeshChatX data is in private app storage. Copy it to the file-manager folder so you can browse and back up files, then restart the app.",
- "upgrade_copy": "Copy and restart",
- "upgrade_stay_internal": "Stay on private storage",
- "working": "Preparing…",
- "copy_restart_hint": "Copy scheduled. Closing the app — open MeshChatX again to finish.",
- "restart_to_apply": "Restart the app to apply your storage choice.",
- "failed": "Could not update storage location."
+ "upgrade_title": "Siirrä tiedot tiedostonhallinnan tallennustilaan?",
+ "upgrade_desc": "MeshChatX-tietosi ovat yksityisessä sovellustallennuksessa. Kopioi ne tiedostonhallinnan kansioon, jotta voit selata ja varmuuskopioida tiedostoja, ja käynnistä sitten sovellus uudelleen.",
+ "upgrade_copy": "Kopioi ja käynnistä uudelleen",
+ "upgrade_stay_internal": "Pysy yksityisessä tallennuksessa",
+ "working": "Valmistellaan…",
+ "copy_restart_hint": "Kopiointi ajoitettu. Sulje sovellus — avaa MeshChatX uudelleen viimeistelläksesi.",
+ "restart_to_apply": "Käynnistä sovellus uudelleen ottaaksesi tallennusvalinnan käyttöön.",
+ "failed": "Tallennuspaikan päivitys epäonnistui."
},
"tutorial": {
"title": "Aloitus",
- "welcome": "Welcome to",
- "welcome_desc": "The future of off-grid communication. Secure, decentralized, and unstoppable.",
- "migration_title": "Earlier install folder detected",
- "migration_desc": "Data was found in .reticulum-meshchat. Copy it into .reticulum-meshchatx and restart, or start fresh and leave the old folder as-is.",
- "migration_migrate": "Copy to .reticulum-meshchatx",
- "migration_fresh": "Start fresh",
- "migration_working": "Updating storage…",
- "migration_done_restart": "Restart the app to use the new folder.",
- "migration_failed": "Could not update storage.",
- "security": "Security & Performance",
- "security_desc": "Massive improvements in speed, security, and crash recovery.",
- "security_desc_page": "Massive improvements in speed, security, and integrity with built-in crash recovery.",
- "maps": "Maps",
- "maps_desc": "OpenLayers w/ MBTiles support (export and offline support) and custom API endpoints.",
- "maps_desc_page": "OpenLayers support with offline MBTiles (export and offline support) and custom API endpoints for online maps.",
- "voice": "Full LXST Voice",
- "voice_desc": "Voicemail, ringtones, phonebook, and contact sharing.",
- "voice_desc_page": "Crystal clear voice calls over mesh. Voicemail, custom ringtones, and phonebook discovery.",
- "tools": "Built-in extras",
- "tools_desc": "Micron Editor, NomadNet, RNS tools, Docs.",
- "tools_desc_page": "Micron editor, NomadNet nodes, RNS tools, and integrated documentation.",
- "archiver": "Archiver",
- "archiver_desc": "Manual and Automated page archiving.",
- "archiver_desc_page": "Manual and Automated page archiving tools for offline browsing.",
+ "welcome": "Tervetuloa",
+ "welcome_desc": "Off-grid-viestinnän tulevaisuus. Turvallinen, hajautettu ja pysäyttämätön.",
+ "migration_title": "Aiempi asennuskansio havaittu",
+ "migration_desc": "Tietoja löytyi kansiosta .reticulum-meshchat. Kopioi ne kansioon .reticulum-meshchatx ja käynnistä uudelleen, tai aloita puhtaalta pöydältä ja jätä vanha kansio ennalleen.",
+ "migration_migrate": "Kopioi kansioon .reticulum-meshchatx",
+ "migration_fresh": "Aloita puhtaalta pöydältä",
+ "migration_working": "Päivitetään tallennustilaa…",
+ "migration_done_restart": "Käynnistä sovellus uudelleen käyttääksesi uutta kansiota.",
+ "migration_failed": "Tallennustilan päivitys epäonnistui.",
+ "security": "Turvallisuus ja suorituskyky",
+ "security_desc": "Valtavia parannuksia nopeudessa, turvallisuudessa ja kaatumisen palautuksessa.",
+ "security_desc_page": "Valtavia parannuksia nopeudessa, turvallisuudessa ja eheydessä sisäänrakennetulla kaatumisen palautuksella.",
+ "maps": "Kartat",
+ "maps_desc": "OpenLayers MBTiles-tuella (vienti ja offline-tuki) ja mukautetut API-päätepisteet.",
+ "maps_desc_page": "OpenLayers-tuki offline-MBTilesilla (vienti ja offline-tuki) ja mukautetut API-päätepisteet verkkokartoille.",
+ "voice": "Täysi LXST-ääni",
+ "voice_desc": "Vastaaja, soittoäänet, puhelinluettelo ja yhteystietojen jakaminen.",
+ "voice_desc_page": "Kristallinkirkkaat puhelut verkon yli. Vastaaja, mukautetut soittoäänet ja puhelinluettelon löytäminen.",
+ "tools": "Sisäänrakennetut lisäosat",
+ "tools_desc": "Micron-editori, NomadNet, RNS-työkalut, dokumentaatio.",
+ "tools_desc_page": "Micron-editori, NomadNet-solmut, RNS-työkalut ja integroitu dokumentaatio.",
+ "archiver": "Arkistoija",
+ "archiver_desc": "Manuaalinen ja automaattinen sivujen arkistointi.",
+ "archiver_desc_page": "Manuaalinen ja automaattinen sivujen arkistointityökalut offline-selausta varten.",
"banishment": "Karkotus",
- "banishment_desc": "Banish annoying people, nodes and support for RNS blackhole level dropping their announces",
- "palette": "Command Palette + Keybindings",
- "palette_desc": "Navigate everything instantly and customize shortcuts.",
- "palette_desc_page": "Navigate the entire application and customize your workflow with instant shortcuts.",
- "i18n": "i18n Support",
- "i18n_desc": "Available in English, German, Italian, Russian, Dutch, French, and Spanish.",
- "i18n_desc_page": "Full internationalization support for English, German, Italian, Russian, Dutch, French, and Spanish.",
- "more_features": "+ many more features!",
+ "banishment_desc": "Karkota ärsyttävät ihmiset, solmut ja tuki RNS:n musta-aukko-tason pudotukselle heidän ilmoituksilleen",
+ "palette": "Komentopaletti + Pikanäppäimet",
+ "palette_desc": "Navigoi kaikkeen välittömästi ja mukauta pikakuvakkeita.",
+ "palette_desc_page": "Navigoi koko sovelluksessa ja mukauta työnkulkusi välittömillä pikakuvakkeilla.",
+ "i18n": "i18n-tuki",
+ "i18n_desc": "Saatavilla englanniksi, saksaksi, italiaksi, venäjäksi, hollanniksi, ranskaksi ja espanjaksi.",
+ "i18n_desc_page": "Täysi kansainvälistämistuki englanniksi, saksaksi, italiaksi, venäjäksi, hollanniksi, ranskaksi ja espanjaksi.",
+ "more_features": "+ paljon muita ominaisuuksia!",
"connect": "Yhdistä mesh-verkkoon",
- "connect_desc": "To send messages, you need to connect to a Reticulum interface.",
- "connect_desc_page": "Use one of the public networks below or add a custom interface from the Interfaces page.",
+ "connect_desc": "Lähettääksesi viestejä, sinun täytyy yhdistää Reticulum-rajapintaan.",
+ "connect_desc_page": "Käytä jotakin alla olevista julkisista verkoista tai lisää mukautettu rajapinta Rajapinnat-sivulta.",
"identity_title": "Identiteetti",
- "identity_desc": "Choose a new identity or import an existing key before connecting.",
- "identity_desc_page": "Choose a new identity or import an existing key before connecting to the mesh.",
- "identity_new": "New Identity (default)",
- "identity_new_desc": "Keep the default identity and optionally set your display name.",
- "identity_import": "Import existing identity",
- "identity_import_desc": "Import from an identity file or paste a base32 key.",
- "identity_set_name": "Set name",
- "identity_upload_file": "Import identity file",
- "identity_base32_placeholder": "Paste base32 private identity key",
- "identity_import_required": "Choose an identity file or paste a base32 key to import.",
- "identity_import_failed": "Failed to import identity",
- "identity_name_update_failed": "Failed to set display name",
- "identity_switch_failed": "Failed to activate imported identity",
- "suggested_networks": "Suggested Public Networks",
- "suggested_relays": "Suggested Relays",
- "use": "Use",
+ "identity_desc": "Valitse uusi identiteetti tai tuo olemassa oleva avain ennen yhdistämistä.",
+ "identity_desc_page": "Valitse uusi identiteetti tai tuo olemassa oleva avain ennen yhdistämistä meshiin.",
+ "identity_new": "Uusi identiteetti (oletus)",
+ "identity_new_desc": "Pidä oletusidentiteetti ja aseta halutessasi näyttönimesi.",
+ "identity_import": "Tuo olemassa oleva identiteetti",
+ "identity_import_desc": "Tuo identiteettitiedostosta tai liitä base32-avain.",
+ "identity_set_name": "Aseta nimi",
+ "identity_upload_file": "Tuo identiteettitiedosto",
+ "identity_base32_placeholder": "Liitä base32-yksityinen identiteettiavain",
+ "identity_import_required": "Valitse identiteettitiedosto tai liitä base32-avain tuotavaksi.",
+ "identity_import_failed": "Identiteetin tuonti epäonnistui",
+ "identity_name_update_failed": "Näyttönimen asettaminen epäonnistui",
+ "identity_switch_failed": "Tuodun identiteetin aktivointi epäonnistui",
+ "suggested_networks": "Ehdotetut julkiset verkot",
+ "suggested_relays": "Ehdotetut releet",
+ "use": "Käytä",
"online": "Online",
- "custom_interfaces": "Custom Interfaces",
- "custom_interfaces_desc": "Want to add a bespoke interface? Head to the Interfaces page to configure a custom connection.",
- "custom_interfaces_desc_page": "For any private relays or hardware you manage yourself, add them through the dedicated Interfaces page.",
- "open_interfaces": "Open Interfaces page",
- "learn_create": "Learn & Create",
- "learn_create_desc": "Discover how to use MeshChatX to its full potential.",
- "learn_create_desc_page": "Discover how to use MeshChatX to its full potential and create your own content.",
- "learn_create_more": "More to explore",
+ "custom_interfaces": "Mukautetut rajapinnat",
+ "custom_interfaces_desc": "Haluatko lisätä räätälöidyn rajapinnan? Siirry Rajapinnat-sivulle määrittääksesi mukautetun yhteyden.",
+ "custom_interfaces_desc_page": "Jos sinulla on yksityisiä releitä tai laitteistoa, jota hallinnoit itse, lisää ne omistetun Rajapinnat-sivun kautta.",
+ "open_interfaces": "Avaa Liitännät-sivu",
+ "learn_create": "Opi & Luo",
+ "learn_create_desc": "Tutustu MeshChatX:n täyden potentiaalin käyttöön.",
+ "learn_create_desc_page": "Tutustu MeshChatX:n täyden potentiaalin käyttöön ja luo omaa sisältöä.",
+ "learn_create_more": "Lisää tutkittavaa",
"documentation": "Dokumentaatio",
- "documentation_desc": "Read the official MeshChatX and Reticulum documentation.",
- "documentation_desc_page": "Guides for MeshChatX and the Reticulum stack.",
- "meshchatx_docs": "MeshChatX Docs",
- "reticulum_docs": "Reticulum Docs",
- "read_meshchatx_docs": "Read MeshChatX Docs",
- "reticulum_manual": "Reticulum Network Manual",
- "micron_editor": "Micron Editor",
- "micron_editor_desc": "Take a look at the Micron Editor for a guide on creating mesh-native pages.",
- "micron_editor_desc_page": "Learn how to create mesh-native pages and interactive content using the Micron markup language.",
- "open_micron_editor": "Open Micron Editor",
- "open_mesh_server": "Open Mesh Server",
+ "documentation_desc": "Lue virallinen MeshChatX- ja Reticulum-dokumentaatio.",
+ "documentation_desc_page": "Oppaat MeshChatX:lle ja Reticulum-pinolle.",
+ "meshchatx_docs": "MeshChatX-dokumentaatio",
+ "reticulum_docs": "Reticulum-dokumentaatio",
+ "read_meshchatx_docs": "Lue MeshChatX-dokumentaatio",
+ "reticulum_manual": "Reticulum-verkko-opas",
+ "micron_editor": "Micron-editori",
+ "micron_editor_desc": "Tutustu Micron-editoriin saadaksesi oppaan mesh-natiivisivujen luomiseen.",
+ "micron_editor_desc_page": "Opi luomaan mesh-alkuperäisiä sivuja ja interaktiivista sisältöä Micron-merkintäkielellä.",
+ "open_micron_editor": "Avaa Micron-editori",
+ "open_mesh_server": "Avaa Mesh-palvelin",
"open_identities": "Identiteetit",
- "identities_card_title": "Multiple identities",
- "identities_card_desc": "Switch personas, export keys, and keep separate profiles on one device.",
- "identities_card_desc_page": "Run multiple Reticulum identities on one install: create and delete personas, switch who you are on the mesh, and export keys when you need them.",
- "paper_messages": "Explore NomadNet Nodes",
- "paper_messages_desc": "Browse Nomad pages and services.",
- "send_messages": "Send Messages",
- "send_messages_desc": "Start a secure conversation.",
- "explore_nodes": "Visualize Nodes",
- "explore_nodes_desc": "Open the map or network graph.",
- "voice_calls": "Voice Calls",
- "voice_calls_desc": "Place and receive voice calls.",
+ "identities_card_title": "Useita identiteettejä",
+ "identities_card_desc": "Vaihda henkilöllisyyksiä, vie avaimia ja pidä erillisiä profiileja yhdellä laitteella.",
+ "identities_card_desc_page": "Aja useita Reticulum-identiteettejä yhdellä asennuksella: luo ja poista henkilöllisyyksiä, vaihda kuka olet meshissä, ja vie avaimia tarvittaessa.",
+ "paper_messages": "Tutki NomadNet-solmuja",
+ "paper_messages_desc": "Selaa Nomad-sivuja ja -palveluita.",
+ "send_messages": "Lähetä viestejä",
+ "send_messages_desc": "Aloita turvallinen keskustelu.",
+ "explore_nodes": "Visualisoi solmuja",
+ "explore_nodes_desc": "Avaa kartta tai verkostokaavio.",
+ "voice_calls": "Puhelut",
+ "voice_calls_desc": "Soita ja vastaanota puheluita.",
"ready": "Valmis aloittamaan!",
- "ready_desc": "Everything is set up. Reticulum has been restarted with your new configuration.",
- "ready_desc_page": "MeshChatX is now configured and Reticulum has been hot-reloaded with your new settings.",
- "docker_note": "Reticulum was restarted automatically. If anything looks off, you can restart MeshChatX from the menu.",
- "restart_required": "Reticulum Restarted",
- "restart_desc_page": "Reticulum was hot-reloaded with your new configuration. No manual restart is required for normal use.",
- "back": "Back",
- "skip": "Skip",
- "next": "Next",
- "restart_start": "Start MeshChatX",
- "finish_setup": "Finish Setup",
- "skip_setup": "Skip Setup",
+ "ready_desc": "Kaikki on asetettu. Reticulum on käynnistetty uudelleen uudella kokoonpanollasi.",
+ "ready_desc_page": "MeshChatX on nyt määritetty ja Reticulum on ladattu uudelleen kuumana uusilla asetuksillasi.",
+ "docker_note": "Reticulum käynnistettiin automaattisesti uudelleen. Jos jokin näyttää vialta, voit käynnistää MeshChatX:n uudelleen valikosta.",
+ "restart_required": "Reticulum käynnistettiin uudelleen",
+ "restart_desc_page": "Reticulum ladattiin uudelleen kuumana uudella kokoonpanollasi. Manuaalista uudelleenkäynnistystä ei tarvita normaalia käyttöä varten.",
+ "back": "Takaisin",
+ "skip": "Ohita",
+ "next": "Seuraava",
+ "restart_start": "Käynnistä MeshChatX",
+ "finish_setup": "Viimeistele asennus",
+ "skip_setup": "Ohita asennus",
"continue": "Jatka",
- "skip_confirm": "Are you sure you want to skip the setup? You'll need to manually add interfaces later.",
- "discovery_question": "Do you want to use community interface discovering and auto-connect?",
- "discovery_desc": "This allows MeshChatX to automatically find and connect to public community nodes near you or on the internet.",
- "yes": "Yes, use discovery",
- "no": "No, manual setup",
- "discovery_enabled": "Community discovery enabled",
- "failed_enable_discovery": "Failed to enable discovery",
- "mode_discovery_title": "Auto-Discovery",
- "mode_discovery_desc": "Find and auto-connect to nearby and internet-reachable Reticulum nodes. You'll pick one or more bootstrap nodes next.",
- "mode_local_title": "Local Network Only",
- "mode_local_desc": "Use Reticulum on your LAN/Wi-Fi only. Adds an AutoInterface for zero-config local mesh.",
- "mode_manual_title": "Manual Setup",
- "mode_manual_desc": "Skip and configure interfaces yourself from the Interfaces page later.",
- "mode_change_later": "You can change connection settings any time from Reticulum settings.",
- "bootstrap_title": "Pick Bootstrap Nodes",
- "bootstrap_desc": "Bootstrap nodes give discovery a starting point. Select one or more, then continue.",
- "bootstrap_pick_random_tcp": "Pick 3 random TCP nodes",
- "bootstrap_pick_random_none": "No suitable TCP community presets are available. Refresh community presets or pick nodes manually (discovered lists are not used for random pick).",
- "bootstrap_pick_random_done": "Selected {count}: {names}",
- "bootstrap_selected_nodes_heading": "Selected nodes",
- "bootstrap_search_placeholder": "Search discovered and community…",
- "bootstrap_search_no_match": "No nodes match your search",
- "bootstrap_search_clear": "Clear search",
- "bootstrap_only_label": "Bootstrap-only for added interfaces",
- "bootstrap_only_hint": "When on, every interface you add in this step is created as bootstrap-only, which Reticulum can drop after enough links auto-connect. The default is adjustable in Interfaces, Discovery settings.",
- "bootstrap_desc_page": "Bootstrap nodes give Reticulum a starting point so it can discover the rest of the network. Select one or more from discovered or community nodes below.",
- "bootstrap_discovered": "Discovered Nodes",
- "bootstrap_community": "Community Nodes",
+ "skip_confirm": "Haluatko varmasti ohittaa asennuksen? Sinun on lisättävä liitännät manuaalisesti myöhemmin.",
+ "discovery_question": "Haluatko käyttää yhteisön rajapintojen löytöä ja automaattista yhdistämistä?",
+ "discovery_desc": "Tämä antaa MeshChatX:n automaattisesti löytää ja yhdistää julkisiin yhteisön solmuihin lähelläsi tai internetissä.",
+ "yes": "Kyllä, käytä löytöä",
+ "no": "Ei, manuaalinen asennus",
+ "discovery_enabled": "Yhteisön löytö käytössä",
+ "failed_enable_discovery": "Löydön käyttöönotto epäonnistui",
+ "mode_discovery_title": "Automaattinen löytö",
+ "mode_discovery_desc": "Etsi ja muodosta automaattinen yhteys lähellä oleviin ja internetin kautta tavoitettaviin Reticulum-solmuihin. Valitset seuraavaksi yhden tai useamman käynnistyssolmun.",
+ "mode_local_title": "Vain paikallinen verkko",
+ "mode_local_desc": "Käytä Reticulumia vain lähiverkossa/Wi-Fi:ssä. Lisää AutoInterface nollakonfiguraation paikallista mesh-verkkoa varten.",
+ "mode_manual_title": "Manuaalinen asennus",
+ "mode_manual_desc": "Ohita ja määritä liitännät itse Liitännät-sivulla myöhemmin.",
+ "mode_change_later": "Voit muuttaa yhteysasetuksia milloin tahansa Reticulum-asetuksista.",
+ "bootstrap_title": "Valitse bootstrap-solmut",
+ "bootstrap_desc": "Bootstrap-solmut antavat löydölle lähtökohdan. Valitse yksi tai useampi ja jatka.",
+ "bootstrap_pick_random_tcp": "Valitse 3 satunnaista TCP-solmua",
+ "bootstrap_pick_random_none": "Sopivia TCP-yhteisön esiasetuksia ei ole saatavilla. Päivitä yhteisön esiasetukset tai valitse solmut manuaalisesti (löydettyjä listoja ei käytetä satunnaisvalintaan).",
+ "bootstrap_pick_random_done": "Valittu {count}: {names}",
+ "bootstrap_selected_nodes_heading": "Valitut solmut",
+ "bootstrap_search_placeholder": "Hae löydetyistä ja yhteisöstä…",
+ "bootstrap_search_no_match": "Yksikään solmu ei vastaa hakua",
+ "bootstrap_search_clear": "Tyhjennä haku",
+ "bootstrap_only_label": "Vain bootstrap lisätyille rajapinnoille",
+ "bootstrap_only_hint": "Kun päällä, jokainen tässä vaiheessa lisäämäsi rajapinta luodaan vain bootstrap-käyttöön, jonka Reticulum voi pudottaa, kun tarpeeksi linkkejä on yhdistetty automaattisesti. Oletusta voi säätää Rajapinnat, Löytö-asetuksissa.",
+ "bootstrap_desc_page": "Bootstrap-solmut antavat Reticulumille lähtökohdan, jotta se voi löytää muun verkon. Valitse yksi tai useampi alla olevista löydetyistä tai yhteisön solmuista.",
+ "bootstrap_discovered": "Löydetyt solmut",
+ "bootstrap_community": "Yhteisön solmut",
"bootstrap_selected": "{count} valittu",
- "bootstrap_skip": "Skip for now",
- "bootstrap_confirm": "Add selected and restart RNS",
- "bootstrap_added": "Added {count} bootstrap interface(s)",
- "bootstrap_pick_at_least_one": "Pick at least one bootstrap node",
- "failed_add_bootstrap": "Failed to add bootstrap interface",
- "failed_add_bootstrap_none": "No bootstrap interfaces were added. Check your selection and try again.",
- "failed_save_bootstrap_only": "Failed to save bootstrap-only preference",
- "failed_enable_propagation": "Failed to enable auto-propagation",
- "connect_mode_required": "Choose a connection mode to continue",
- "local_added": "Local AutoInterface added",
- "failed_add_local": "Failed to add local interface",
- "failed_reload_rns": "Failed to restart Reticulum",
- "ready_finished": "Reticulum has been restarted with your new configuration",
+ "bootstrap_skip": "Ohita toistaiseksi",
+ "bootstrap_confirm": "Lisää valitut ja käynnistä RNS uudelleen",
+ "bootstrap_added": "Lisätty {count} bootstrap-rajapintaa",
+ "bootstrap_pick_at_least_one": "Valitse vähintään yksi bootstrap-solmu",
+ "failed_add_bootstrap": "Bootstrap-käyttöliittymän lisääminen epäonnistui",
+ "failed_add_bootstrap_none": "Yhtään bootstrap-käyttöliittymää ei lisätty. Tarkista valintasi ja yritä uudelleen.",
+ "failed_save_bootstrap_only": "Bootstrap-vain-asetuksen tallennus epäonnistui",
+ "failed_enable_propagation": "Automaattisen levityksen käyttöönotto epäonnistui",
+ "connect_mode_required": "Valitse yhteystapa jatkaaksesi",
+ "local_added": "Paikallinen AutoInterface lisätty",
+ "failed_add_local": "Paikallisen käyttöliittymän lisääminen epäonnistui",
+ "failed_reload_rns": "Reticulumin uudelleenkäynnistys epäonnistui",
+ "ready_finished": "Reticulum on käynnistetty uudelleen uudella kokoonpanollasi",
"propagation": "Levityssolmu",
- "propagation_question": "Do you want to auto-configure propagation mode?",
- "propagation_desc": "Propagation nodes act like an always-on mailbox for your messages. They securely store messages while you are offline and deliver them as soon as you reconnect to the network.",
- "propagation_auto": "Auto-configure will automatically find and connect to the most reliable propagation node available. If no node is currently available, MeshChatX will wait for one to appear. Until then, offline message syncing will be unavailable.",
- "propagation_manual": "Or manually configure?",
- "propagation_manual_desc": "You can manually configure a propagation node later in settings, or leave it empty if you don't want to use one.",
- "propagation_enable_auto": "Enable Auto-Configuration",
- "propagation_skip_auto": "Configure Manually / Skip",
- "auto_propagation_enabled": "Auto-propagation enabled"
+ "propagation_question": "Haluatko ottaa automaattikonfiguroinnin käyttöön levitystilassa?",
+ "propagation_desc": "Levityssolmut toimivat kuin aina päällä oleva postilaatikko viesteillesi. Ne tallentavat viestit turvallisesti, kun olet offline-tilassa, ja toimittavat ne heti, kun muodostat yhteyden verkkoon uudelleen.",
+ "propagation_auto": "Automaattikonfigurointi etsii ja yhdistää automaattisesti luotettavimpaan saatavilla olevaan levityssolmuun. Jos solmua ei ole tällä hetkellä saatavilla, MeshChatX odottaa sellaisen ilmestymistä. Siihen asti offline-viestien synkronointi ei ole käytettävissä.",
+ "propagation_manual": "Vai määritä manuaalisesti?",
+ "propagation_manual_desc": "Voit määrittää levityssolmun manuaalisesti myöhemmin asetuksissa tai jättää sen tyhjäksi, jos et halua käyttää sellaista.",
+ "propagation_enable_auto": "Ota automaattikonfigurointi käyttöön",
+ "propagation_skip_auto": "Määritä manuaalisesti / Ohita",
+ "auto_propagation_enabled": "Automaattinen levitys käytössä"
},
"command_palette": {
- "search_placeholder": "Search commands, routes, or peers",
- "no_results": "No results found for \"{query}\"",
- "group_actions": "Actions",
- "group_recent": "Recent Peers",
+ "search_placeholder": "Hae komentoja, reittejä tai vertaisia",
+ "no_results": "Ei tuloksia haulle \"{query}\"",
+ "group_actions": "Toiminnot",
+ "group_recent": "Viimeaikaiset vertaiset",
"group_contacts": "Yhteystiedot",
- "footer_navigate": "Navigate",
+ "footer_navigate": "Navigoi",
"footer_select": "Valitse",
"nav_messages": "Viestit",
- "nav_messages_desc": "Conversations and LXMF inbox",
+ "nav_messages_desc": "Keskustelut ja LXMF-saapuneet",
"nav_nomad": "Nomad-verkko",
- "nav_nomad_desc": "Browse Nomad pages and services",
+ "nav_nomad_desc": "Selaa Nomad-sivuja ja -palveluita",
"nav_map": "Kartta",
- "nav_map_desc": "Geographic map and layers",
- "nav_paper": "Paper Messages",
- "nav_paper_desc": "Signed paper messages (QR)",
- "nav_call": "Voice Calls",
- "nav_call_desc": "Voice calls over the mesh",
+ "nav_map_desc": "Maantieteellinen kartta ja tasot",
+ "nav_paper": "Paperiviestit",
+ "nav_paper_desc": "Allekirjoitetut paperiviestit (QR)",
+ "nav_call": "Puhelut",
+ "nav_call_desc": "Puhelut verkon yli",
"nav_settings": "Asetukset",
- "nav_settings_desc": "App and transport preferences",
+ "nav_settings_desc": "Sovellus- ja kuljetusasetukset",
"nav_ping": "Ping",
- "nav_ping_desc": "Measure RTT to a destination",
+ "nav_ping_desc": "Mittaa RTT kohteeseen",
"nav_rnprobe": "RNProbe",
- "nav_rnprobe_desc": "Probe reachability and delay",
+ "nav_rnprobe_desc": "Tutki saavutettavuutta ja viivettä",
"nav_rncp": "RNCP",
- "nav_rncp_desc": "File copy over Reticulum (RNCP)",
+ "nav_rncp_desc": "Tiedostokopiointi Reticulumin yli (RNCP)",
"nav_rnstatus": "RNStatus",
- "nav_rnstatus_desc": "Interface and link statistics",
+ "nav_rnstatus_desc": "Käyttöliittymä- ja linkkitilastot",
"nav_rnpath": "RNPath",
- "nav_rnpath_desc": "Paths and announce queues",
+ "nav_rnpath_desc": "Polut ja ilmoitusjonot",
"nav_rnpath_trace": "RNPath Trace",
- "nav_rnpath_trace_desc": "Hop list toward a hash",
+ "nav_rnpath_trace_desc": "Hyppylista kohti hajautusarvoa",
"nav_translator": "Kääntäjä",
- "nav_translator_desc": "Translate message text",
- "nav_forwarder": "Forwarder",
- "nav_forwarder_desc": "LXMF forwarding rules",
+ "nav_translator_desc": "Käännä viestiteksti",
+ "nav_forwarder": "Välittäjä",
+ "nav_forwarder_desc": "LXMF-välityssäännöt",
"nav_documentation": "Dokumentaatio",
- "nav_documentation_desc": "Offline manuals",
- "nav_repository_server": "Repository server",
- "nav_repository_server_desc": "MeshChatX wheels, Reticulum packages, and your files over HTTP",
- "nav_micron_editor": "Micron Editor",
- "nav_micron_editor_desc": "Edit Micron markup",
- "nav_reticulum_config_editor": "Reticulum Config Editor",
- "nav_reticulum_config_editor_desc": "Edit the raw Reticulum config file",
+ "nav_documentation_desc": "Offline-käsikirjat",
+ "nav_repository_server": "Repository-palvelin",
+ "nav_repository_server_desc": "MeshChatX-pyörät, Reticulum-paketit ja tiedostosi HTTP:n yli",
+ "nav_micron_editor": "Micron-editori",
+ "nav_micron_editor_desc": "Muokkaa Micron-merkintää",
+ "nav_reticulum_config_editor": "Reticulum-asetuseditori",
+ "nav_reticulum_config_editor_desc": "Muokkaa raakaa Reticulum-asetustiedostoa",
"nav_rnode_flasher": "RNode Flasher",
- "nav_rnode_flasher_desc": "Device firmware update",
+ "nav_rnode_flasher_desc": "Laitteen laiteohjelmistopäivitys",
"nav_debug_logs": "Vianetsintälokit",
- "nav_debug_logs_desc": "Application and access logs",
+ "nav_debug_logs_desc": "Sovellus- ja pääsylokit",
"action_sync": "Synkronoi viestit",
- "action_sync_desc": "Sync with your propagation node",
- "action_compose": "Compose Message",
- "action_compose_desc": "New LXMF message",
+ "action_sync_desc": "Synkronoi levityssolmun kanssa",
+ "action_compose": "Kirjoita viesti",
+ "action_compose_desc": "Uusi LXMF-viesti",
"action_getting_started": "Aloitus",
- "action_getting_started_desc": "Open the setup guide",
- "action_changelog": "Changelog",
- "action_changelog_desc": "Recent changes"
+ "action_getting_started_desc": "Avaa aloitusopas",
+ "action_changelog": "Muutosloki",
+ "action_changelog_desc": "Viimeaikaiset muutokset"
}
}

diff --git a/meshchatx/src/frontend/locales/fr.json b/meshchatx/src/frontend/locales/fr.json
index e4fa84c3..b1c76b0a 100644
--- a/meshchatx/src/frontend/locales/fr.json
+++ b/meshchatx/src/frontend/locales/fr.json
@@ -1,7 +1,7 @@
{
"_languageName": "Français",
"bots": {
- "title": "LXMFy Bots",
+ "title": "Bots LXMFy",
"description": "Les robots LXMF simples (écho, notes, rappels) lorsque LXMFy est installé.",
"bot_framework": "Cadre bot",
"lxmfy_not_detected": "LXMFy non détecté",
@@ -30,7 +30,7 @@
"bot_deleted": "Bot supprimé avec succès",
"failed_to_delete": "Impossible de supprimer le bot",
"more_bots_coming": "D'autres robots arrivent bientôt !",
- "chat_with_bot": "Chat",
+ "chat_with_bot": "Discuter",
"lxmf_address": "Adresse LXMF",
"last_announce": "Dernière annonce",
"never_announced": "Pas encore vu sur ce nœud",
@@ -219,14 +219,14 @@
"auto_select_pending": "Aucun nœud de propagation n'a encore été sélectionné. L'application en choisira une lorsque disponible.",
"incoming_message_size": "Taille du message entrant",
"incoming_message_size_description": "Taille maximale pour une livraison directe LXMF que vous accepterez.",
- "incoming_message_size_1mb": "1 MB",
+ "incoming_message_size_1mb": "1 Mo",
"incoming_message_size_10mb": "10 Mo",
"incoming_message_size_25mb": "25 Mo",
"incoming_message_size_50mb": "50 Mo",
"incoming_message_size_1gb": "1 Go",
"incoming_message_size_custom": "Personnalisé",
"incoming_message_size_unit_mb": "Mo",
- "incoming_message_size_unit_gb": "GB",
+ "incoming_message_size_unit_gb": "Go",
"auto_sync_interval": "Intervalle de synchronisation automatique",
"last_synced": "Dernière synchronisation : il y a {time}",
"last_synced_never": "Dernière synchronisation : jamais.",
@@ -417,41 +417,41 @@
"telemetry_trust_grant": "Confiance pour la télémétrie",
"location_manage_desc": "Gérez comment votre emplacement est partagé.",
"restart_rns": "Redémarrer RNS",
- "flood_protection": "Flood Protection",
- "flood_protection_description": "Automatically raise the inbound stamp cost when receiving too many messages per minute from many sources. This makes coordinated spam attacks computationally expensive while keeping normal conversations affordable.",
- "flood_protection_enabled": "Enable auto-adjusting stamp cost",
- "flood_threshold": "Messages per minute threshold",
- "flood_max_stamp_cost": "Maximum stamp cost during flood",
- "flood_cooldown": "Cooldown before lowering cost (seconds)",
+ "flood_protection": "Protection contre les inondations",
+ "flood_protection_description": "Augmente automatiquement le coût du timbre entrant lors de la réception de trop nombreux messages par minute provenant de nombreuses sources. Cela rend les attaques de spam coordonnées coûteuses en calcul tout en maintenant les conversations normales abordables.",
+ "flood_protection_enabled": "Activer l'ajustement automatique du coût du timbre",
+ "flood_threshold": "Seuil de messages par minute",
+ "flood_max_stamp_cost": "Coût maximal du timbre pendant l'inondation",
+ "flood_cooldown": "Temps de refroidissement avant réduction du coût (secondes)",
"relay_chat": "Chat relais",
- "desktop_tray_enabled": "System tray integration",
- "desktop_tray_enabled_description": "Keep a tray icon so MeshChatX can hide to the background instead of quitting.",
- "desktop_close_behavior": "When closing the window",
- "desktop_close_behavior_description": "Choose whether closing the window quits, hides to the tray/taskbar, or asks each time.",
- "desktop_close_behavior_ask": "Ask every time",
- "desktop_close_behavior_quit": "Quit application",
- "desktop_close_behavior_background": "Keep running in background",
- "desktop_close_behavior_background_no_tray": "Minimize to taskbar",
- "share_reticulum_instance": "Share Reticulum Instance",
- "share_reticulum_instance_description": "Make this MeshChatX Reticulum instance available to other local programs (Sideband-style shared instance). Other apps can use connectivity without Transport enabled.",
- "obfuscate_hops": "Obfuscate Hops",
- "obfuscate_hops_description": "When enabled, Reticulum applies a random local hop delta (RNS local_hops_delta) so outbound traffic does not advertise a true zero-hop origin to the wider mesh.",
- "respond_to_probes": "Respond to Probes",
- "respond_to_probes_description": "Allow this instance to answer Reticulum probe requests from the network.",
- "enable_remote_management": "Enable Remote Management",
- "enable_remote_management_description": "Allow remote management of this Reticulum instance when configured in the RNS config.",
- "shared_instance_type": "Shared Instance Type",
- "shared_instance_type_default": "Platform default",
- "shared_instance_type_description": "Use TCP when domain sockets are unavailable (common on Android). Leave default otherwise.",
- "instance_name": "Instance Name",
- "instance_name_description": "Isolate multiple shared instances on one system. Default is usually fine.",
- "rpc_config": "RPC Access",
- "rpc_config_description": "Copy these lines into another program's [reticulum] section for full shared-instance RPC access (management, interface status, path info).",
- "rpc_config_unavailable": "RPC key is not available yet. Start Reticulum as a shared instance first.",
- "rpc_config_copied": "RPC config copied to clipboard",
- "copy_rpc_config": "Copy RPC Config",
- "connected_to_shared_instance": "This MeshChatX process is attached to an external shared Reticulum instance. Edit that instance's config to change share/RPC settings.",
- "copy_failed": "Failed to copy to clipboard",
+ "desktop_tray_enabled": "Intégration dans la barre système",
+ "desktop_tray_enabled_description": "Conserver une icône dans la barre système pour que MeshChatX puisse se cacher en arrière-plan au lieu de se fermer.",
+ "desktop_close_behavior": "Lors de la fermeture de la fenêtre",
+ "desktop_close_behavior_description": "Choisissez si la fermeture de la fenêtre quitte, cache dans la barre d'état/barre des tâches, ou demande à chaque fois.",
+ "desktop_close_behavior_ask": "Demander à chaque fois",
+ "desktop_close_behavior_quit": "Quitter l'application",
+ "desktop_close_behavior_background": "Continuer à fonctionner en arrière-plan",
+ "desktop_close_behavior_background_no_tray": "Réduire dans la barre des tâches",
+ "share_reticulum_instance": "Partager l'instance Reticulum",
+ "share_reticulum_instance_description": "Rendre cette instance Reticulum de MeshChatX disponible pour d'autres programmes locaux (instance partagée de type Sideband). D'autres applications peuvent utiliser la connectivité sans activer le transport.",
+ "obfuscate_hops": "Masquer les sauts",
+ "obfuscate_hops_description": "Lorsqu'elle est activée, Reticulum applique un delta de saut local aléatoire (RNS local_hops_delta) afin que le trafic sortant n'annonce pas une origine à zéro saut au maillage étendu.",
+ "respond_to_probes": "Répondre aux sondes",
+ "respond_to_probes_description": "Permettre à cette instance de répondre aux demandes de sonde Reticulum provenant du réseau.",
+ "enable_remote_management": "Activer la gestion à distance",
+ "enable_remote_management_description": "Autoriser la gestion à distance de cette instance Reticulum lorsqu'elle est configurée dans la configuration RNS.",
+ "shared_instance_type": "Type d'instance partagée",
+ "shared_instance_type_default": "Par défaut de la plateforme",
+ "shared_instance_type_description": "Utiliser TCP lorsque les sockets de domaine ne sont pas disponibles (courant sur Android). Laisser la valeur par défaut sinon.",
+ "instance_name": "Nom de l'instance",
+ "instance_name_description": "Isoler plusieurs instances partagées sur un même système. La valeur par défaut convient généralement.",
+ "rpc_config": "Accès RPC",
+ "rpc_config_description": "Copiez ces lignes dans la section [reticulum] d'un autre programme pour un accès RPC complet à l'instance partagée (gestion, état des interfaces, informations de chemin).",
+ "rpc_config_unavailable": "La clé RPC n'est pas encore disponible. Démarrez d'abord Reticulum en tant qu'instance partagée.",
+ "rpc_config_copied": "Configuration RPC copiée dans le presse-papiers",
+ "copy_rpc_config": "Copier la configuration RPC",
+ "connected_to_shared_instance": "Ce processus MeshChatX est attaché à une instance Reticulum partagée externe. Modifiez la configuration de cette instance pour changer les paramètres de partage/RPC.",
+ "copy_failed": "Échec de la copie dans le presse-papiers",
"rpc_key_hidden": "Masquée — appuyer pour afficher",
"rpc_key_show": "Afficher la clé RPC",
"rpc_key_hide": "Masquer la clé RPC",
@@ -493,20 +493,20 @@
"invalid_address": "Adresse non valable",
"loading": "Chargement...",
"ok": "Très bien.",
- "clear": "Clear"
+ "clear": "Effacer"
},
"stickers": {
- "settings_title": "Stickers",
+ "settings_title": "Autocollants",
"settings_description": "Images enregistrées pour cette identité. Utilisez-les à partir du compositeur de message ou enregistrez des images à partir de chats. Exporter ou importer une sauvegarde JSON.",
"export": "Autocollants d'exportation",
"import": "Importer des autocollants",
"export_done": "Stickers exportés",
"replace_duplicates": "Remplacer les images dupliquées lors de l'importation",
"count": "{count} autocollant(s) enregistré(s)",
- "open_picker": "Stickers",
+ "open_picker": "Autocollants",
"picker_tooltip": "Emoji, autocollants et GIF",
"tab_emojis": "Émojis",
- "tab_stickers": "Stickers",
+ "tab_stickers": "Autocollants",
"empty_library": "Pas encore d'autocollants.",
"drop_or_click_hint": "Déposer des images ici ou cliquer pour parcourir (PNG, JPEG, GIF, WebP, BMP, TGS, WebM, max 512 KB chacun).",
"add_more_hint": "Déposer ou cliquer pour ajouter d'autres autocollants.",
@@ -617,8 +617,8 @@
"section_transform": "Transformer",
"scale": "Échelle",
"rotation": "Rotation",
- "flip_h": "Flip horizontal",
- "flip_v": "Flip vertical",
+ "flip_h": "Retourner horizontalement",
+ "flip_v": "Retourner verticalement",
"reset_transform": "Réinitialiser la transformation",
"section_effects": "Effets",
"bg_removed": "Fond supprimé",
@@ -704,119 +704,119 @@
"plugins": {
"settings": {
"title": "Plugins",
- "description": "Install, enable, and review permissions for MeshChatX plugins. ZIP and WASM installs show a confirmation dialog with permissions, signature status, and security findings.",
+ "description": "Installez, activez et examinez les autorisations des plugins MeshChatX. Les installations ZIP et WASM affichent une boîte de dialogue de confirmation avec les autorisations, l'état de la signature et les résultats de sécurité.",
"enable": "Activer",
"disable": "Désactiver",
"remove": "Supprimer",
- "permissions": "Permissions",
- "install_zip": "Install plugin from ZIP or WASM bundle",
+ "permissions": "Autorisations",
+ "install_zip": "Installer un plugin à partir d'un bundle ZIP ou WASM",
"enabled": "Plugin activé",
"disabled": "Plugin désactivé",
"removed": "Plugin supprimé",
"installed": "Plugin installé",
"auto_disabled": "Plugin désactivé automatiquement : {reason}",
"kill_switch": "Un plugin a été désactivé : {reason}",
- "empty_state": "No plugins installed yet. Upload a plugin ZIP or WASM bundle to get started.",
- "drag_drop": "Drag and drop a plugin ZIP or WASM bundle here",
- "choose_file": "Choose ZIP or WASM file",
+ "empty_state": "Aucun plugin installé pour le moment. Téléchargez un plugin ZIP ou WASM pour commencer.",
+ "drag_drop": "Glissez-déposez un plugin ZIP ou WASM ici",
+ "choose_file": "Choisir un fichier ZIP ou WASM",
"confirm_remove": "Supprimer le plugin « {name} » ? Ses fichiers et données seront effacés.",
"badge_enabled": "Activé",
"badge_disabled": "Désactivé",
- "badge_frontend": "UI",
+ "badge_frontend": "Interface utilisateur",
"badge_wasm": "WASM",
"install_failed": "Échec de l'installation du plugin : {reason}",
"installing": "Installation du plugin...",
- "badge_network": "Network",
- "network_endpoints": "Network endpoints",
- "previewing": "Reviewing plugin...",
+ "badge_network": "Réseau",
+ "network_endpoints": "Points de terminaison réseau",
+ "previewing": "Examen du plugin en cours...",
"badge_python": "Python",
- "badge_signed": "Signed",
- "badge_trusted": "Trusted",
- "badge_invalid_signature": "Invalid signature",
- "badge_tampered": "Tampered"
+ "badge_signed": "Signé",
+ "badge_trusted": "De confiance",
+ "badge_invalid_signature": "Signature invalide",
+ "badge_tampered": "Altéré"
},
"permissions": {
- "none": "No elevated permissions",
- "hooks.announce.received": "Receive mesh announce events",
- "hooks.rns.link.event": "Receive RNS link packet and close events",
- "managers.destinationPath.read": "Read the Reticulum path table",
- "managers.rnsLink.open": "Open RNS links to destinations",
- "managers.rnsLink.identify": "Identify on RNS links",
- "managers.rnsLink.request": "Send request/response over RNS links",
- "managers.rnsLink.send": "Send packets over RNS links",
- "managers.rnsLink.close": "Close RNS links",
- "storage.isolated": "Use isolated plugin storage",
- "network.fetch": "Make outbound internet HTTP requests"
+ "none": "Aucune autorisation élevée",
+ "hooks.announce.received": "Recevoir les événements d'annonce mesh",
+ "hooks.rns.link.event": "Recevoir les événements de paquet et de fermeture de lien RNS",
+ "managers.destinationPath.read": "Lire la table de routage Reticulum",
+ "managers.rnsLink.open": "Ouvrir des liens RNS vers des destinations",
+ "managers.rnsLink.identify": "S'identifier sur les liens RNS",
+ "managers.rnsLink.request": "Envoyer des requêtes/réponses via les liens RNS",
+ "managers.rnsLink.send": "Envoyer des paquets via les liens RNS",
+ "managers.rnsLink.close": "Fermer les liens RNS",
+ "storage.isolated": "Utiliser un stockage isolé pour le plugin",
+ "network.fetch": "Effectuer des requêtes HTTP sortantes sur Internet"
},
"install_dialog": {
- "title": "Install plugin",
- "network_title": "Install plugin with network access",
- "message": "Review permissions for \"{name}\" ({id}) before installing.",
- "permissions": "Requested permissions",
- "permissions_hint": "Uncheck any permission you do not want to grant. Denied capabilities stay unavailable at runtime.",
- "grant": "Allow",
- "network_endpoints": "External network endpoints",
- "network_endpoints_blocked": "Network access is not granted. These URLs will remain blocked.",
- "network_endpoints_unknown": "This plugin requests network access but did not declare specific endpoints.",
- "cancel": "Cancel",
- "confirm": "Install",
- "close": "Close",
+ "title": "Installer le plugin",
+ "network_title": "Installer un plugin avec accès réseau",
+ "message": "Vérifiez les autorisations pour \"{name}\" ({id}) avant d'installer.",
+ "permissions": "Autorisations demandées",
+ "permissions_hint": "Décochez toute autorisation que vous ne souhaitez pas accorder. Les capacités refusées resteront indisponibles à l'exécution.",
+ "grant": "Autoriser",
+ "network_endpoints": "Points d'accès réseau externes",
+ "network_endpoints_blocked": "L'accès réseau n'est pas accordé. Ces URL resteront bloquées.",
+ "network_endpoints_unknown": "Ce plugin demande un accès réseau mais n'a pas déclaré de points d'accès spécifiques.",
+ "cancel": "Annuler",
+ "confirm": "Installer",
+ "close": "Fermer",
"signature": "Signature",
- "signature_unsigned": "Unsigned",
- "signature_signed": "Signed",
- "signature_trusted": "Trusted publisher",
- "signature_invalid": "Invalid signature (install blocked)",
- "trust_publisher": "Trust this publisher",
- "security_findings": "Security findings"
+ "signature_unsigned": "Non signé",
+ "signature_signed": "Signé",
+ "signature_trusted": "Éditeur de confiance",
+ "signature_invalid": "Signature invalide (installation bloquée)",
+ "trust_publisher": "Faire confiance à cet éditeur",
+ "security_findings": "Résultats de sécurité"
},
"sideband": {
- "title": "Sideband plugins",
- "description": "Optional Sideband-compatible Python plugins loaded from a directory. They run in-process with full host access when enabled.",
- "master_enable": "Enable Sideband plugin loader (dangerous)",
- "command_enable": "Enable Sideband command plugins",
- "path": "Plugin directory path",
- "save": "Save Sideband settings",
- "reload": "Reload Sideband plugins",
- "loaded": "Loaded Sideband plugins",
- "saved": "Sideband plugin settings saved",
- "reloaded": "Sideband plugins reloaded",
- "danger_confirm": "Sideband plugins run as full Python code inside MeshChatX with filesystem, network, and LXMF access. Enable only if you trust every script in the directory."
+ "title": "Plugins Sideband",
+ "description": "Plugins Python compatibles Sideband facultatifs chargés depuis un répertoire. Ils s'exécutent dans le processus avec un accès complet à l'hôte lorsqu'ils sont activés.",
+ "master_enable": "Activer le chargeur de plugins Sideband (dangereux)",
+ "command_enable": "Activer les plugins de commande Sideband",
+ "path": "Chemin du répertoire des plugins",
+ "save": "Enregistrer les paramètres Sideband",
+ "reload": "Recharger les plugins Sideband",
+ "loaded": "Plugins Sideband chargés",
+ "saved": "Paramètres des plugins Sideband enregistrés",
+ "reloaded": "Plugins Sideband rechargés",
+ "danger_confirm": "Les plugins Sideband s'exécutent en tant que code Python complet dans MeshChatX avec accès au système de fichiers, au réseau et à LXMF. Activez uniquement si vous faites confiance à chaque script du répertoire."
}
},
"selftest": {
"title": "Auto-test du système",
- "description": "Run diagnostic checks for the network stack, database, identity, imports, storage, LXMF, subprocess/run-module, SQLite, identity files, loopback TCP, unicode paths, RNode helpers, bot launcher argv, HTTP status/config/health/auth/bots/security/interfaces/reticulum-instance/identities/favourites/telephone/plugins/sideband/RRC APIs, plugin runtime, WebSocket, RNS Link API, and bot lifecycle.",
+ "description": "Exécutez des vérifications de diagnostic pour la pile réseau, la base de données, l'identité, les importations, le stockage, LXMF, le sous-processus/module d'exécution, SQLite, les fichiers d'identité, TCP en boucle locale, les chemins Unicode, les assistants RNode, le lanceur de bots argv, les API HTTP status/config/health/auth/bots/security/interfaces/reticulum-instance/identities/favourites/telephone/plugins/sideband/RRC, l'exécution des plugins, WebSocket, l'API RNS Link et le cycle de vie des bots.",
"run_test_btn": "Exécuter les diagnostics",
"running": "Diagnostic en cours...",
"stack_up": "Pile réseau",
"config_good": "Intégrité de la configuration",
"db_good": "Connexion à la base de données",
"read_write": "Lecture/Écriture stockage",
- "identity_good": "Identity Loaded",
- "imports_good": "Critical Imports",
- "storage_lock_good": "Storage Lock",
- "temp_fs_good": "Temp Filesystem",
- "public_assets_good": "Public Assets",
- "lxmf_router_good": "LXMF Router",
- "subprocess_good": "Subprocess Spawn",
- "run_module_good": "MeshChatX Run-Module",
- "sqlite_roundtrip": "SQLite Roundtrip",
- "identity_roundtrip": "Identity File Roundtrip",
- "loopback_tcp": "Loopback TCP Bind",
- "unicode_path_good": "Unicode Path I/O",
- "rnode_support_good": "RNode Support Module",
- "bot_launcher_good": "Bot Launcher Argv",
- "http_status_good": "HTTP Status",
- "http_app_info_good": "HTTP App Info",
- "http_config_good": "HTTP Config",
- "http_db_health_good": "HTTP Database Health",
- "http_auth_csrf_good": "HTTP Auth CSRF",
- "http_bots_status_good": "HTTP Bots Status",
- "http_security_good": "HTTP Server Security",
- "http_interfaces_good": "HTTP RNS Interfaces",
- "http_identities_good": "HTTP Identities",
- "http_favourites_good": "HTTP Favourites",
- "http_telephone_good": "HTTP Telephone Status",
+ "identity_good": "Identité chargée",
+ "imports_good": "Importations critiques",
+ "storage_lock_good": "Verrouillage de stockage",
+ "temp_fs_good": "Système de fichiers temporaire",
+ "public_assets_good": "Actifs publics",
+ "lxmf_router_good": "Routeur LXMF",
+ "subprocess_good": "Lancement de sous-processus",
+ "run_module_good": "Module d'exécution MeshChatX",
+ "sqlite_roundtrip": "Aller-retour SQLite",
+ "identity_roundtrip": "Aller-retour fichier identité",
+ "loopback_tcp": "Liaison TCP boucle locale",
+ "unicode_path_good": "E/S de chemin Unicode",
+ "rnode_support_good": "Module de support RNode",
+ "bot_launcher_good": "Lanceur de bots Argv",
+ "http_status_good": "Statut HTTP",
+ "http_app_info_good": "Infos app HTTP",
+ "http_config_good": "Config HTTP",
+ "http_db_health_good": "Santé base de données HTTP",
+ "http_auth_csrf_good": "Auth CSRF HTTP",
+ "http_bots_status_good": "Statut bots HTTP",
+ "http_security_good": "Sécurité serveur HTTP",
+ "http_interfaces_good": "Interfaces RNS HTTP",
+ "http_identities_good": "Identités HTTP",
+ "http_favourites_good": "Favoris HTTP",
+ "http_telephone_good": "Statut téléphone HTTP",
"websocket_good": "WebSocket",
"bots_lifecycle": "Bot Créer / Démarrer / Arrêter / Supprimer",
"passed": "Réussi",
@@ -824,17 +824,17 @@
"status_label": "Statut",
"reason_label": "Raison",
"checks_completed": "Tous les contrôles ont réussi.",
- "http_reticulum_instance_good": "HTTP RNS Instance Settings",
+ "http_reticulum_instance_good": "Paramètres instance RNS HTTP",
"expand_reason": "Afficher les détails de l’échec",
"collapse_reason": "Masquer les détails de l’échec",
- "http_plugins_good": "HTTP Plugins API",
- "http_plugins_trust_good": "HTTP Plugin Trust List",
- "http_sideband_plugins_good": "HTTP Sideband Plugins",
- "http_sideband_config_good": "HTTP Sideband Config",
- "http_rrc_hubs_good": "HTTP RRC Hubs",
- "http_rrc_servers_good": "HTTP RRC Servers",
- "plugins_runtime_good": "Plugin Manager Runtime",
- "websocket_rns_link_good": "WebSocket RNS Link API"
+ "http_plugins_good": "API plugins HTTP",
+ "http_plugins_trust_good": "Liste de confiance plugins HTTP",
+ "http_sideband_plugins_good": "Plugins Sideband HTTP",
+ "http_sideband_config_good": "Config Sideband HTTP",
+ "http_rrc_hubs_good": "Hubs RRC HTTP",
+ "http_rrc_servers_good": "Serveurs RRC HTTP",
+ "plugins_runtime_good": "Exécution gestionnaire de plugins",
+ "websocket_rns_link_good": "API de liaison WebSocket RNS"
},
"maintenance": {
"title": "Maintenance et données",
@@ -1293,41 +1293,41 @@
"geolocation_not_supported": "La géolocalisation n'est pas prise en charge par votre navigateur",
"no_nodes_location": "Aucun noeud découvert avec emplacement trouvé",
"failed_fetch_nodes": "Impossible de récupérer les nœuds découverts pour la cartographie",
- "share_view": "Share map view (copy links)",
- "share_message_prefix": "MeshChatX map:",
- "share_copied": "Map links copied to clipboard",
- "ping_here": "Ping here (send in chat)",
- "ping_here_toolbar": "Ping map center in chat",
- "ping_modal_title": "Send map ping",
+ "share_view": "Partager la vue de la carte (copier les liens)",
+ "share_message_prefix": "Carte MeshChatX :",
+ "share_copied": "Liens de carte copiés dans le presse-papiers",
+ "ping_here": "Ping ici (envoyer dans le chat)",
+ "ping_here_toolbar": "Ping du centre de la carte dans le chat",
+ "ping_modal_title": "Envoyer un ping cartographique",
"ping_destination": "Destination",
- "ping_pick_conversation": "Choose a conversation",
- "ping_send": "Send ping",
- "ping_sent": "Map ping sent",
- "ping_failed": "Could not send map ping",
- "ping_invalid_destination": "Pick a valid 32-character destination hash",
- "ping_message_prefix": "MeshChatX map ping:",
- "north_up": "North is up (map not rotated)",
- "export_tile_limit_exceeded": "Too many tiles for one export. Lower max zoom or shrink the area.",
- "export_region_world": "World (low zoom)",
+ "ping_pick_conversation": "Choisir une conversation",
+ "ping_send": "Envoyer le ping",
+ "ping_sent": "Ping cartographique envoyé",
+ "ping_failed": "Impossible d'envoyer le ping cartographique",
+ "ping_invalid_destination": "Choisissez un hachage de destination valide de 32 caractères",
+ "ping_message_prefix": "Ping cartographique MeshChatX :",
+ "north_up": "Nord en haut (carte non pivotée)",
+ "export_tile_limit_exceeded": "Trop de tuiles pour une seule exportation. Réduisez le zoom max ou la zone.",
+ "export_region_world": "Monde (zoom faible)",
"export_region_europe": "Europe",
- "export_region_north_america": "North America",
- "export_region_south_america": "South America",
- "export_region_africa": "Africa",
- "export_region_asia": "Asia",
- "export_region_oceania": "Oceania",
+ "export_region_north_america": "Amérique du Nord",
+ "export_region_south_america": "Amérique du Sud",
+ "export_region_africa": "Afrique",
+ "export_region_asia": "Asie",
+ "export_region_oceania": "Océanie",
"vector_exchange_title": "GeoJSON / KML / KMZ",
- "vector_exchange_merge": "Merge with existing drawings (uncheck to replace)",
+ "vector_exchange_merge": "Fusionner avec les dessins existants (décocher pour remplacer)",
"vector_exchange_hint": "L'importation prend en charge les icônes de divers formats, notamment GeoJSON et KML. Sélectionnez un dessin pour voir ses métadonnées.",
- "vector_import_geojson": "Import GeoJSON",
- "vector_import_kml": "Import KML",
- "vector_import_kmz": "Import KMZ",
- "vector_export_geojson": "Export GeoJSON",
- "vector_export_kml": "Export KML",
- "vector_export_kmz": "Export KMZ",
- "vector_import_ok": "Imported {count} feature(s).",
- "vector_import_empty": "No features found in file.",
- "vector_import_failed": "Could not read vector file.",
- "vector_export_ok": "Export started.",
+ "vector_import_geojson": "Importer GeoJSON",
+ "vector_import_kml": "Importer KML",
+ "vector_import_kmz": "Importer KMZ",
+ "vector_export_geojson": "Exporter en GeoJSON",
+ "vector_export_kml": "Exporter KML",
+ "vector_export_kmz": "Exporter KMZ",
+ "vector_import_ok": "{count} entité(s) importée(s).",
+ "vector_import_empty": "Aucune entité trouvée dans le fichier.",
+ "vector_import_failed": "Impossible de lire le fichier vectoriel.",
+ "vector_export_ok": "Exportation démarrée.",
"drop_geo_files": "Déposez le fichier carte ici",
"drop_map_files_hint": "GeoJSON, KML, KMZ ou MBTiles",
"drop_no_geo_files": "Aucun fichier GeoJSON, KML ou KMZ détecté.",
@@ -1508,11 +1508,11 @@
"failed_copy_message": "Impossible de copier le message",
"failed_send_ingest": "Échec de l'envoi de la demande d'ingestion",
"address_copied": "Votre adresse LXMF copiée dans le presse-papiers",
- "map_link_share_title": "Shared map view",
- "map_link_ping_title": "Map ping",
- "map_link_open": "Open on map",
- "map_link_copy_uri": "Copy meshchatx link",
- "map_link_copied": "Map link copied",
+ "map_link_share_title": "Vue cartographique partagée",
+ "map_link_ping_title": "Ping cartographique",
+ "map_link_open": "Ouvrir sur la carte",
+ "map_link_copy_uri": "Copier le lien meshchatx",
+ "map_link_copied": "Lien cartographique copié",
"hash_copied": "Le hash d'identité copié dans le presse-papiers",
"failed_to_copy_hash": "Impossible de copier le hash d'identité",
"copy_hash": "Copier le hash",
@@ -1570,7 +1570,7 @@
"failed_delete_conversation": "a omis de supprimer la conversation",
"delete_history_confirm": "Voulez-vous vraiment supprimer tous les messages dans cette conversation? Ça ne peut pas être annulé !",
"failed_delete_history": "n'a pas supprimé l'historique",
- "pin_conversation": "Pin conversation",
+ "pin_conversation": "Épingler la conversation",
"unpin_conversation": "Déconnecter la conversation",
"failed_toggle_pin": "Impossible de mettre à jour la broche",
"opportunistic_deferred_label": "Attendre",
@@ -1590,23 +1590,23 @@
"snr_val": "SNR:{snr}dB",
"reply": "Réponse",
"replying_to": "Réponse",
- "forward_banner_label": "Forwarded message",
- "forward_you_shared": "You're forwarding this quote",
- "forward_pick_recipient_title": "Forward to contact",
- "forward_message": "Forward",
- "forward_sent": "Message forwarded",
- "forward_failed": "Could not forward message",
- "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
- "forward_verify_show": "Source and verification",
- "forward_verify_hide": "Hide verification",
+ "forward_banner_label": "Message transféré",
+ "forward_you_shared": "Vous transférez cette citation",
+ "forward_pick_recipient_title": "Transférer à un contact",
+ "forward_message": "Transférer",
+ "forward_sent": "Message transféré",
+ "forward_failed": "Impossible de transférer le message",
+ "forward_no_lxmf_destination": "Ce contact n'a pas d'adresse de livraison LXMF utilisable.",
+ "forward_verify_show": "Source et vérification",
+ "forward_verify_hide": "Masquer la vérification",
"forward_verify_explanation": "Les liens Paper LXMF ne fonctionnent que si le message complet est disponible et respecte les limites de Paper. Les extraits cités peuvent être falsifiés.",
- "forward_verify_loading": "Looking up verification URI…",
- "forward_verify_open_uri": "Open verification URI",
- "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
- "forward_verify_not_cached": "Original message bytes are not cached here.",
- "forward_verify_failed": "Verification lookup failed.",
- "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
- "forward_open_party_is_self": "That is your own address.",
+ "forward_verify_loading": "Recherche de l'URI de vérification…",
+ "forward_verify_open_uri": "Ouvrir l'URI de vérification",
+ "forward_verify_unavailable": "Les octets du message d'origine ne sont pas mis en cache ici, donc aucune URI de vérification n'a pu être construite.",
+ "forward_verify_not_cached": "Les octets du message d'origine ne sont pas mis en cache ici.",
+ "forward_verify_failed": "Échec de la recherche de vérification.",
+ "forward_content_stub": "_Transféré via MeshChatX_\nLes pièces jointes et le texte cité appartiennent à l'expéditeur d'origine.",
+ "forward_open_party_is_self": "Il s'agit de votre propre adresse.",
"message_actions": "Actions du message",
"save_image_to_device": "Enregistrer l'image sur l'appareil",
"cancel_send": "Annuler l'envoi",
@@ -1650,8 +1650,8 @@
"nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
"nomad_micron_wasm_link_label": "micron-parser-go",
"nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only.",
- "nomad_micron_default_engine_title": "Default Micron renderer (.mu)",
- "nomad_micron_default_engine_desc": "JavaScript is the default. WebAssembly uses micron-parser-go when the engine above is enabled and the module has loaded.",
+ "nomad_micron_default_engine_title": "Moteur de rendu Micron par défaut (.mu)",
+ "nomad_micron_default_engine_desc": "JavaScript est le moteur par défaut. WebAssembly utilise micron-parser-go lorsque le moteur ci-dessus est activé et que le module est chargé.",
"nomad_micron_default_engine_option_js": "JavaScript (micron-parser)",
"nomad_micron_default_engine_option_wasm": "WebAssembly (micron-parser-go)",
"micron_wasm_update_open_btn": "Mettre à jour le moteur WASM…",
@@ -1678,22 +1678,22 @@
"micron_wasm_update_toast_uploaded": "WASM installé depuis votre fichier.",
"micron_wasm_update_toast_reverted": "WASM Micron fourni avec l’application rétabli.",
"tabs": {
- "general": "General",
- "general_desc": "Language, appearance, and platform",
+ "general": "Général",
+ "general_desc": "Langue, apparence et plateforme",
"messages": "Messages",
- "messages_desc": "LXMF, stickers, and safety",
- "network": "Network",
- "network_desc": "Transport, interfaces, and discovery",
+ "messages_desc": "LXMF, autocollants et sécurité",
+ "network": "Réseau",
+ "network_desc": "Transport, interfaces et découverte",
"nomad": "Nomad",
- "nomad_desc": "Archiver and page rendering",
- "privacy": "Privacy",
- "privacy_desc": "Data, access, and security",
+ "nomad_desc": "Archiveur et rendu de pages",
+ "privacy": "Confidentialité",
+ "privacy_desc": "Données, accès et sécurité",
"maintenance": "Maintenance",
- "maintenance_desc": "Cleanup, export, and import",
+ "maintenance_desc": "Nettoyage, exportation et importation",
"plugins": "Extensions",
"plugins_desc": "Installer et gérer les extensions MeshChatX"
},
- "failed_update_reticulum_instance": "Failed to update Reticulum instance settings!"
+ "failed_update_reticulum_instance": "Échec de la mise à jour des paramètres de l'instance Reticulum"
},
"debug": {
"title": "Débogues",
@@ -1870,10 +1870,10 @@
"multiline_hint": "Appuyez de nouveau sur Entrée pour passer en mode multiligne",
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
- "renderer_chip_plaintext": "Text",
- "renderer_hint_markdown": "Markdown renderer",
- "renderer_hint_html": "Sanitized HTML",
- "renderer_hint_plaintext": "Escaped plain text",
+ "renderer_chip_plaintext": "Texte",
+ "renderer_hint_markdown": "Rendu Markdown",
+ "renderer_hint_html": "HTML nettoyé",
+ "renderer_hint_plaintext": "Texte brut échappé",
"load_phase_default": "Chargement de la page",
"load_phase_finding_path": "Recherche d'un chemin réseau vers le nœud",
"load_phase_establishing_link": "Établir un lien avec le nœud",
@@ -1932,7 +1932,7 @@
"name": "Nom",
"name_placeholder": "Nom de la règle (par exemple, Noeud d'intérieur)...",
"forward_to_hash": "Passer à Hash",
- "destination_placeholder": "Destination LXMF hash...",
+ "destination_placeholder": "Hachage LXMF de destination...",
"source_filter": "Filtre source (facultatif)",
"source_filter_placeholder": "Seulement en avant de ce hasch...",
"add_button": "Ajouter une règle",
@@ -1958,21 +1958,21 @@
"page_of": "Page {page} sur {total_pages}",
"export_mu": "Exportation .mu",
"export_selected_mu": "Exportation .mu ({count})",
- "nodes_title": "Nodes",
- "snapshots_title": "Snapshots",
- "select_all": "Select all",
- "delete_selected": "Delete ({count})",
- "viewing_archive": "Viewing archive",
- "select_snapshot": "Select a snapshot to view",
- "open_live": "Open live",
- "search_nodes_placeholder": "Search nodes or content...",
- "no_results": "No results found",
- "no_archives": "No archives yet",
- "show_nodes": "Show nodes",
- "hide_nodes": "Hide nodes",
- "show_snapshots": "Show snapshots",
- "hide_snapshots": "Hide snapshots",
- "delete_snapshot": "Delete snapshot"
+ "nodes_title": "Nœuds",
+ "snapshots_title": "Instantanés",
+ "select_all": "Tout sélectionner",
+ "delete_selected": "Supprimer ({count})",
+ "viewing_archive": "Affichage de l'archive",
+ "select_snapshot": "Sélectionner un instantané à afficher",
+ "open_live": "Ouvrir en direct",
+ "search_nodes_placeholder": "Rechercher des nœuds ou du contenu...",
+ "no_results": "Aucun résultat trouvé",
+ "no_archives": "Aucune archive pour l'instant",
+ "show_nodes": "Afficher les nœuds",
+ "hide_nodes": "Masquer les nœuds",
+ "show_snapshots": "Afficher les instantanés",
+ "hide_snapshots": "Masquer les instantanés",
+ "delete_snapshot": "Supprimer l'instantané"
},
"docs": {
"title": "Documentation",
@@ -2039,7 +2039,7 @@
"power_tools": "Services publics",
"diagnostics_description": "Utilitaires mesh et Reticulum au même endroit : joignabilité, chemins, transfert de fichiers, traduction, documentation et aides matérielles. Ouvrez une ligne pour l'outil complet.",
"back_to_tools": "Retour aux outils",
- "beta_badge": "Beta",
+ "beta_badge": "Bêta",
"alpha_badge": "Alpha",
"ping": {
"title": "Ping",
@@ -2055,7 +2055,7 @@
},
"rnsh": {
"title": "RNSH",
- "description": "Manage persistent rnsh sessions"
+ "description": "Gérer les sessions rnsh persistantes"
},
"rnstatus": {
"title": "Statut RN",
@@ -2078,7 +2078,7 @@
"rnpath_trace": {
"title": "Trace de chemin RNS",
"description": "Afficher la liste de houblon vers une destination hash.",
- "destination_hash": "Destination Hash",
+ "destination_hash": "Hash de destination",
"placeholder": "Entrez le hash de destination 32-char...",
"trace": "Tracer le chemin",
"tracing": "Tracer le chemin à travers le maillage...",
@@ -2157,88 +2157,88 @@
"flow_no_rules": "Aucune règle"
},
"message_blocklist": {
- "title": "Message blocklist",
- "description": "Auto-banish senders when their message or name matches a word or regex from your shared blocklist.",
- "beta_notice_title": "Beta (work in progress)",
- "beta_notice_body": "This tool is off until you turn it on. Words match regardless of case. Regex uses normal patterns. If something matches, the sender gets banished right away. Export a list to share with your group, or import one to merge or replace yours.",
- "enable_label": "Enable message blocklist",
- "enable_hint": "When disabled, entries are saved but no automatic banish runs.",
- "entries_heading": "Blocked phrases",
- "add_entry": "Add phrase",
- "empty_entries": "No phrases yet. Add entries or import a shared list.",
- "entry_enabled": "Active",
- "entry_placeholder": "spam phrase or regex pattern",
- "remove_entry": "Remove",
- "scope_label": "Applies to",
- "scope_everyone": "Everyone",
- "scope_contacts": "Contacts only",
- "scope_non_contacts": "Non-contacts only",
- "match_in_label": "Match in",
- "match_message": "Message title and body",
- "match_peer_fields": "Peer display name and contact fields",
- "match_mode_substring": "Word",
+ "title": "Liste de blocage des messages",
+ "description": "Bannir automatiquement les expéditeurs lorsque leur message ou leur nom correspond à un mot ou une expression régulière de votre liste de blocage partagée.",
+ "beta_notice_title": "Bêta (travail en cours)",
+ "beta_notice_body": "Cet outil est désactivé jusqu'à ce que vous l'activiez. Les mots correspondent indépendamment de la casse. Les expressions régulières utilisent des motifs normaux. Si quelque chose correspond, l'expéditeur est immédiatement banni. Exportez une liste pour la partager avec votre groupe, ou importez-en une pour fusionner ou remplacer la vôtre.",
+ "enable_label": "Activer la liste de blocage des messages",
+ "enable_hint": "Lorsqu'elle est désactivée, les entrées sont sauvegardées mais aucun bannissement automatique n'est effectué.",
+ "entries_heading": "Phrases bloquées",
+ "add_entry": "Ajouter une phrase",
+ "empty_entries": "Aucune phrase pour l'instant. Ajoutez des entrées ou importez une liste partagée.",
+ "entry_enabled": "Actif",
+ "entry_placeholder": "phrase de spam ou motif regex",
+ "remove_entry": "Supprimer",
+ "scope_label": "S'applique à",
+ "scope_everyone": "Tout le monde",
+ "scope_contacts": "Contacts uniquement",
+ "scope_non_contacts": "Non-contacts uniquement",
+ "match_in_label": "Correspondre dans",
+ "match_message": "Titre et corps du message",
+ "match_peer_fields": "Nom d'affichage du pair et champs de contact",
+ "match_mode_substring": "Mot",
"match_mode_regex": "Regex",
- "export": "Export",
- "import": "Import",
- "save": "Save",
- "saving": "Saving…",
- "revert": "Reload",
- "saved": "Blocklist saved",
- "save_failed": "Could not save blocklist",
- "load_failed": "Could not load blocklist",
- "enabled_toast": "Message blocklist enabled",
- "disabled_toast": "Message blocklist disabled",
- "exported": "Blocklist exported",
- "export_failed": "Could not export blocklist",
- "import_merge_confirm": "Merge with your current list? Choose Cancel to replace your list entirely.",
- "imported_merge": "Blocklist merged",
- "imported_replace": "Blocklist replaced",
- "import_failed": "Could not import blocklist"
+ "export": "Exporter",
+ "import": "Importer",
+ "save": "Enregistrer",
+ "saving": "Enregistrement…",
+ "revert": "Recharger",
+ "saved": "Liste de blocage enregistrée",
+ "save_failed": "Impossible d'enregistrer la liste de blocage",
+ "load_failed": "Impossible de charger la liste de blocage",
+ "enabled_toast": "Liste de blocage des messages activée",
+ "disabled_toast": "Liste de blocage des messages désactivée",
+ "exported": "Liste de blocage exportée",
+ "export_failed": "Impossible d'exporter la liste de blocage",
+ "import_merge_confirm": "Fusionner avec votre liste actuelle ? Choisissez Annuler pour remplacer entièrement votre liste.",
+ "imported_merge": "Liste de blocage fusionnée",
+ "imported_replace": "Liste de blocage remplacée",
+ "import_failed": "Impossible d'importer la liste de blocage"
},
"repository_server": {
"title": "Serveur de dépôt",
"description": "Redistribuez les wheels Python MeshChatX et de l'écosystème Reticulum, ainsi que vos propres fichiers, en HTTP clair pour que d'autres sur votre réseau ou sur cet appareil puissent les télécharger.",
"subtitle": "Actualisez les packages logiciels inclus, ajoutez vos propres fichiers ou lancez une page de téléchargement pour d'autres appareils.",
- "back_tools": "Back to tools",
- "http_heading": "Plain HTTP mirror",
- "host_label": "Listen address",
+ "back_tools": "Retour aux outils",
+ "http_heading": "Miroir HTTP simple",
+ "host_label": "Adresse d'écoute",
"port_label": "Port",
- "start_http": "Start",
- "stop_http": "Stop",
- "restart_http": "Restart",
- "http_listen_label": "Listening:",
- "open_http": "Open in browser",
- "http_started": "HTTP server started",
- "http_stopped": "HTTP server stopped",
- "http_restarted": "HTTP server restarted",
- "http_err_generic": "HTTP server request failed",
- "http_err_invalid_host": "Invalid listen address",
- "http_err_invalid_port": "Invalid port",
- "http_err_already_running": "HTTP server is already running",
- "http_err_bind_failed": "Could not bind (port in use or permission denied)",
- "upload_heading": "Upload file",
- "choose_file": "Choose file",
- "refresh_bundled_tooltip": "Download bundled wheels to this device (needs network)",
- "refresh_started": "Downloading bundled packages…",
- "refresh_fetching": "Getting {pkg}…",
- "refresh_ok": "Bundled wheels refreshed",
- "refresh_ok_count": "{n} packages downloaded",
- "refresh_failed": "Could not refresh bundled wheels",
- "refresh_pip_missing": "pip was not found on this system. Install pip and try again.",
- "refresh_partial": "Some packages could not be downloaded (details below)",
- "refresh_partial_toast": "Bundled download finished with some failures",
- "files_heading": "Files",
- "col_name": "Name",
+ "start_http": "Démarrer",
+ "stop_http": "Arrêter",
+ "restart_http": "Redémarrer",
+ "http_listen_label": "Écoute :",
+ "open_http": "Ouvrir dans le navigateur",
+ "http_started": "Serveur HTTP démarré",
+ "http_stopped": "Serveur HTTP arrêté",
+ "http_restarted": "Serveur HTTP redémarré",
+ "http_err_generic": "Échec de la requête au serveur HTTP",
+ "http_err_invalid_host": "Adresse d'écoute invalide",
+ "http_err_invalid_port": "Port invalide",
+ "http_err_already_running": "Le serveur HTTP est déjà en cours d'exécution",
+ "http_err_bind_failed": "Impossible de se lier (port utilisé ou permission refusée)",
+ "upload_heading": "Téléverser un fichier",
+ "choose_file": "Choisir un fichier",
+ "refresh_bundled_tooltip": "Télécharger les wheels groupés sur cet appareil (nécessite un réseau)",
+ "refresh_started": "Téléchargement des paquets groupés…",
+ "refresh_fetching": "Récupération de {pkg}…",
+ "refresh_ok": "Wheels groupés actualisés",
+ "refresh_ok_count": "{n} paquets téléchargés",
+ "refresh_failed": "Impossible d'actualiser les wheels groupés",
+ "refresh_pip_missing": "pip n'a pas été trouvé sur ce système. Installez pip et réessayez.",
+ "refresh_partial": "Certains paquets n'ont pas pu être téléchargés (détails ci-dessous)",
+ "refresh_partial_toast": "Téléchargement groupé terminé avec quelques échecs",
+ "files_heading": "Fichiers",
+ "col_name": "Nom",
"col_source": "Source",
- "col_size": "Size",
- "empty": "No files yet. Upload a file or refresh bundled wheels.",
- "delete": "Delete",
- "delete_confirm": "Delete uploaded file \"{name}\"?",
- "delete_ok": "File removed",
- "delete_failed": "Could not delete file",
- "upload_ok": "File uploaded",
- "upload_failed": "Upload failed",
- "load_failed": "Could not load repository"
+ "col_size": "Taille",
+ "empty": "Aucun fichier pour l'instant. Téléversez un fichier ou actualisez les wheels groupés.",
+ "delete": "Supprimer",
+ "delete_confirm": "Supprimer le fichier téléversé \"{name}\" ?",
+ "delete_ok": "Fichier supprimé",
+ "delete_failed": "Impossible de supprimer le fichier",
+ "upload_ok": "Fichier téléversé",
+ "upload_failed": "Échec du téléversement",
+ "load_failed": "Impossible de charger le dépôt"
},
"rnode_flasher": {
"title": "Flasher RNode",
@@ -2264,7 +2264,7 @@
"download_firmware": "Télécharger Firmware",
"official_firmware": "Firmware officiel",
"ce_firmware": "Firmware CE",
- "transport_node_firmware": "Transport Node Firmware",
+ "transport_node_firmware": "Firmware du nœud de transport",
"common_issues": "Questions communes",
"hardware_failure": "Défaillance matérielle :",
"provision_eeprom_hint": "Vous devez fournir l'eeprom à l'étape 3.",
@@ -2272,7 +2272,7 @@
"set_firmware_hash_hint": "Vous devez définir le hachage du firmware à l'étape 4.",
"step_provision": "3. Disposition EEPROM",
"provision_description": "Définit les informations de l'appareil, le somme de contrôle et la signature vierge",
- "provision": "Provision",
+ "provision": "Provisionner",
"provisioning_wait": "Provisionnement: veuillez patienter...",
"step_set_hash": "4. Définir le firmware Hash",
"set_hash_description": "Utilise le hash de la planche",
@@ -2289,7 +2289,7 @@
"detect_rnode": "Détecter le RNode",
"reboot_rnode": "Redémarrage RNode",
"read_display": "Lire l'affichage",
- "dump_eeprom": "Dump EEPROM",
+ "dump_eeprom": "Vider l'EEPROM",
"wipe_eeprom": "Essuyez EEPROM",
"eeprom_console_hint": "Les dumps EEPROM sont affichés dans la console dev tools.",
"configure_bluetooth": "Configurer Bluetooth (optionnel)",
@@ -2350,11 +2350,11 @@
"failed_start_pairing": "Impossible de commencer l'appariement :{error}",
"failed_set_rotation": "Impossible de définir la rotation de l'affichage :{error}",
"failed_start_reconditioning": "Impossible de démarrer le reconditionnement de l'affichage :{error}",
- "no_main_bin": "Could not locate the main firmware binary in the ZIP.",
- "invalid_host": "Please enter a valid host or IP address.",
- "bluetooth_flash_unsupported": "Bluetooth cannot be used to flash firmware. Use Serial or WiFi to flash, then return to Bluetooth for management.",
- "failed_diagnostics": "Failed to run diagnostics: {error}",
- "failed_detect_with_reason": "Failed to detect RNode: {error}"
+ "no_main_bin": "Impossible de localiser le binaire principal du firmware dans le ZIP.",
+ "invalid_host": "Veuillez entrer un hôte ou une adresse IP valide.",
+ "bluetooth_flash_unsupported": "Le Bluetooth ne peut pas être utilisé pour flasher le firmware. Utilisez Serial ou WiFi pour flasher, puis revenez au Bluetooth pour la gestion.",
+ "failed_diagnostics": "Échec de l'exécution des diagnostics : {error}",
+ "failed_detect_with_reason": "Échec de la détection du RNode : {error}"
},
"alerts": {
"firmware_downloaded": "Le firmware recommandé a été téléchargé et chargé.",
@@ -2375,65 +2375,65 @@
"bluetooth_pairing_started": "Mode d'appariement démarré (30s)",
"rotation_updated": "Rotation mise à jour",
"reconditioning_started": "Reconditionnement commencé",
- "diagnostics_healthy": "Diagnostics: device looks healthy.",
- "diagnostics_issues": "Diagnostics: {count} issue(s) detected."
+ "diagnostics_healthy": "Diagnostics : l'appareil semble en bon état.",
+ "diagnostics_issues": "Diagnostics : {count} problème(s) détecté(s)."
},
"simple": "Simple",
- "advanced": "Advanced",
+ "advanced": "Avancé",
"original": "Original",
- "open_original_tab": "Open the original flasher in a new tab",
+ "open_original_tab": "Ouvrir le flasheur original dans un nouvel onglet",
"bluetooth": "Bluetooth",
- "preparing_firmware": "Preparing firmware...",
- "uploading": "Uploading: {percentage}%",
- "select_firmware_file": "Or select a firmware file (.zip)",
- "wifi_help": "The IP address of your RNode on the local network.",
+ "preparing_firmware": "Préparation du firmware...",
+ "uploading": "Téléversement : {percentage}%",
+ "select_firmware_file": "Ou sélectionnez un fichier firmware (.zip)",
+ "wifi_help": "L'adresse IP de votre RNode sur le réseau local.",
"run_diagnostics": "Diagnostics",
"support": {
"serial": {
- "title": "USB serial is unavailable",
- "polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
+ "title": "USB série indisponible",
+ "polyfill_not_loaded": "Le polyfill USB série n'a pas encore été chargé.",
"android_webview_no_serial": "Android ne prend pas en charge Web Serial dans cette vue. Utilisez un navigateur de bureau ou le flasher intégré.",
- "browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
- "android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
- "unknown": "USB serial cannot be initialised in this environment."
+ "browser_unsupported": "Ce navigateur ne prend pas en charge Web Serial. Essayez Chrome, Edge ou un autre navigateur basé sur Chromium.",
+ "android_use_chrome": "Sur Android, ouvrir cette page dans Chrome permet d'utiliser Web Serial via WebUSB.",
+ "unknown": "L'USB série ne peut pas être initialisé dans cet environnement."
},
"bluetooth": {
- "title": "Bluetooth is unavailable",
+ "title": "Bluetooth indisponible",
"android_bridge_not_implemented": "Web Bluetooth n'est pas disponible ici. Utilisez les paramètres Bluetooth du système ou un autre navigateur.",
- "browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
- "insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
- "requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
- "unknown": "Bluetooth cannot be initialised in this environment."
+ "browser_unsupported": "Ce navigateur ne prend pas en charge Web Bluetooth. Essayez Chrome ou Edge.",
+ "insecure_context": "Web Bluetooth nécessite un contexte sécurisé (HTTPS ou localhost).",
+ "requires_https": "Ouvrez le flasher via HTTPS ou localhost pour activer le Bluetooth.",
+ "unknown": "Le Bluetooth ne peut pas être initialisé dans cet environnement."
},
"actions": {
- "load_polyfill": "Load polyfill",
- "request_bluetooth": "Allow Bluetooth",
- "open_settings": "Open settings",
- "polyfill_loading": "Loading USB serial polyfill...",
- "bluetooth_requested": "Bluetooth permission requested."
+ "load_polyfill": "Charger le polyfill",
+ "request_bluetooth": "Autoriser le Bluetooth",
+ "open_settings": "Ouvrir les paramètres",
+ "polyfill_loading": "Chargement du polyfill USB série...",
+ "bluetooth_requested": "Permission Bluetooth demandée."
}
},
"diagnostics": {
- "title": "Device Diagnostics",
- "healthy": "Healthy",
- "needs_attention": "Needs attention",
- "issues_detected": "Issues detected",
+ "title": "Diagnostics de l'appareil",
+ "healthy": "En bon état",
+ "needs_attention": "Nécessite une attention",
+ "issues_detected": "Problèmes détectés",
"firmware_version": "Firmware",
- "platform": "Platform",
- "board": "Board",
- "provisioned": "Provisioned",
- "product": "Product",
- "model": "Model",
- "firmware_hash": "FW hash",
- "target_hash": "Target hash",
+ "platform": "Plateforme",
+ "board": "Carte",
+ "provisioned": "Provisionné",
+ "product": "Produit",
+ "model": "Modèle",
+ "firmware_hash": "Hash FW",
+ "target_hash": "Hash cible",
"suggestions": {
- "not_provisioned": "EEPROM is not provisioned. Run step 3 (Provision EEPROM).",
- "firmware_hash_missing": "Firmware hash is missing. Run step 4 (Set Firmware Hash).",
- "firmware_hash_mismatch": "Firmware hash mismatch. Re-flash the firmware and re-run step 4.",
- "product_mismatch": "Selected product does not match the connected device.",
- "no_firmware_version": "Could not read firmware version. Try reconnecting the device.",
- "detect_failed": "Could not detect this RNode. Verify cable, port, and power.",
- "read_timeout": "Device did not respond in time. Try reconnecting or rebooting it."
+ "not_provisioned": "L'EEPROM n'est pas provisionnée. Exécutez l'étape 3 (Provisionner l'EEPROM).",
+ "firmware_hash_missing": "Le hash du firmware est manquant. Exécutez l'étape 4 (Définir le hash du firmware).",
+ "firmware_hash_mismatch": "Non-concordance du hash du firmware. Reflashez le firmware et réexécutez l'étape 4.",
+ "product_mismatch": "Le produit sélectionné ne correspond pas à l'appareil connecté.",
+ "no_firmware_version": "Impossible de lire la version du firmware. Essayez de reconnecter l'appareil.",
+ "detect_failed": "Impossible de détecter ce RNode. Vérifiez le câble, le port et l'alimentation.",
+ "read_timeout": "L'appareil n'a pas répondu à temps. Essayez de le reconnecter ou de le redémarrer."
}
}
},
@@ -2509,14 +2509,14 @@
"description": "Synchronisation des fichiers entre les paires de mailles (en développement)."
},
"bots": {
- "title": "LXMFy Bots",
+ "title": "Bots LXMFy",
"description": "Les robots LXMF simples (écho, notes, rappels) lorsque LXMFy est installé."
}
},
"ping": {
- "title": "Ping Mesh Peers",
+ "title": "Ping des pairs Mesh",
"description": "Seules les destinations qui exposent le type d'application ping répondront.",
- "destination_hash": "Destination Hash",
+ "destination_hash": "Hachage de destination",
"timeout_seconds": "Ping Timeout (secondes)",
"start_ping": "Démarrer Ping",
"stop": "Arrête",
@@ -2544,7 +2544,7 @@
"send_file": "Envoyer un fichier",
"fetch_file": "Récupération du fichier",
"listen": "Écoute.",
- "destination_hash": "Destination Hash",
+ "destination_hash": "Hash de destination",
"file_path": "Chemin du fichier",
"timeout_seconds": "Délai (secondes)",
"disable_compression": "Désactiver la compression",
@@ -2585,57 +2585,57 @@
"web_save_path_prompt": "Saisissez le chemin absolu du dossier sur la machine qui exécute MeshChat (serveur) où le fichier récupéré doit être enregistré :"
},
"rnsh": {
- "remote_shell": "Remote shell",
- "usage_title": "Usage",
- "usage_hint": "Create connect or listen sessions, then manage them on the Sessions tab. Output streams live while MeshChatX is running.",
+ "remote_shell": "Shell distant",
+ "usage_title": "Utilisation",
+ "usage_hint": "Créez des sessions de connexion ou d'écoute, puis gérez-les dans l'onglet Sessions. Les flux de sortie restent actifs tant que MeshChatX est en cours d'exécution.",
"tab_sessions": "Sessions",
- "tab_connect": "Connect",
- "tab_listen": "Listen",
+ "tab_connect": "Connexion",
+ "tab_listen": "Écouter",
"sessions": "Sessions",
- "refresh": "Refresh",
- "name": "Session name",
- "name_placeholder": "Ops shell",
- "listen_mode": "Listen",
- "destination_hash": "Destination hash",
+ "refresh": "Actualiser",
+ "name": "Nom de la session",
+ "name_placeholder": "Shell d'exploitation",
+ "listen_mode": "Écouter",
+ "destination_hash": "Hachage de destination",
"destination_placeholder": "7a55144adf826958a9529a3bcf08b149",
- "allowed_hashes": "Allowed identity hashes",
- "allowed_hashes_placeholder": "One hash per line",
- "remote_command": "Remote command",
- "default_command": "Default command",
+ "allowed_hashes": "Hashes d'identité autorisés",
+ "allowed_hashes_placeholder": "Un hash par ligne",
+ "remote_command": "Commande distante",
+ "default_command": "Commande par défaut",
"command_placeholder": "/bin/bash --login",
- "mirror_exit_code": "Mirror exit code (-m)",
- "no_id": "No local identity (-N)",
- "create_and_start": "Create and start",
- "session_output": "Session output",
- "no_command_yet": "No command started yet",
- "start": "Start",
- "stop": "Stop",
- "clear": "Clear",
- "remove": "Remove",
- "send_line": "Send",
- "command_input_placeholder": "Type command input...",
- "status_running": "Running",
- "status_stopped": "Stopped",
- "status_failed": "Failed",
- "no_sessions": "No sessions created yet.",
- "unnamed_session": "Unnamed session",
- "select_or_create_session": "Select or create a session to begin.",
- "no_output_yet": "No output yet.",
- "destination_required": "Destination hash is required for connect mode.",
- "session_created": "Session created",
- "session_started": "Session started",
- "session_stopped": "Session stopped",
- "session_removed": "Session removed",
- "output_cleared": "Output cleared",
- "title": "RNSH - Reticulum Remote Shell",
- "description": "Manage persistent rnsh sessions",
- "failed_to_load_sessions": "Failed to load RNSH sessions",
- "failed_to_create_session": "Failed to create RNSH session",
- "failed_to_start_session": "Failed to start RNSH session",
- "failed_to_stop_session": "Failed to stop RNSH session",
- "failed_to_remove_session": "Failed to remove RNSH session",
- "failed_to_clear_output": "Failed to clear RNSH output",
- "failed_to_send_input": "Failed to send RNSH input",
+ "mirror_exit_code": "Code de sortie miroir (-m)",
+ "no_id": "Aucune identité locale (-N)",
+ "create_and_start": "Créer et démarrer",
+ "session_output": "Sortie de session",
+ "no_command_yet": "Aucune commande démarrée pour l'instant",
+ "start": "Démarrer",
+ "stop": "Arrêter",
+ "clear": "Effacer",
+ "remove": "Supprimer",
+ "send_line": "Envoyer",
+ "command_input_placeholder": "Saisir la commande...",
+ "status_running": "En cours",
+ "status_stopped": "Arrêté",
+ "status_failed": "Échec",
+ "no_sessions": "Aucune session créée pour l'instant.",
+ "unnamed_session": "Session sans nom",
+ "select_or_create_session": "Sélectionnez ou créez une session pour commencer.",
+ "no_output_yet": "Aucune sortie pour l'instant.",
+ "destination_required": "Le hachage de destination est requis pour le mode connexion.",
+ "session_created": "Session créée",
+ "session_started": "Session démarrée",
+ "session_stopped": "Session arrêtée",
+ "session_removed": "Session supprimée",
+ "output_cleared": "Sortie effacée",
+ "title": "RNSH - Shell distant Reticulum",
+ "description": "Gérer les sessions rnsh persistantes",
+ "failed_to_load_sessions": "Échec du chargement des sessions RNSH",
+ "failed_to_create_session": "Échec de la création de la session RNSH",
+ "failed_to_start_session": "Échec du démarrage de la session RNSH",
+ "failed_to_stop_session": "Échec de l'arrêt de la session RNSH",
+ "failed_to_remove_session": "Échec de la suppression de la session RNSH",
+ "failed_to_clear_output": "Échec de l'effacement de la sortie RNSH",
+ "failed_to_send_input": "Échec de l'envoi de l'entrée RNSH",
"listening_on": "À l'écoute sur",
"waiting_for_address": "En attente de l'adresse de l'écouteur...",
"copy_address": "Copier",
@@ -2645,18 +2645,18 @@
"config_dir_placeholder": "Par défaut, la configuration Reticulum de l'application",
"config_dir_hint": "Laissez vide pour partager l'instance Reticulum de MeshChatX. Ne remplacez que pour utiliser un répertoire de configuration Reticulum distinct.",
"tab_sessions_short": "Sessions",
- "tab_connect_short": "Connect",
- "tab_listen_short": "Listen",
- "fullscreen": "Full screen",
- "exit_fullscreen": "Exit full screen",
+ "tab_connect_short": "Connexion",
+ "tab_listen_short": "Écouter",
+ "fullscreen": "Plein écran",
+ "exit_fullscreen": "Quitter le plein écran",
"show_sessions": "Sessions",
- "hide_sessions": "Back to terminal"
+ "hide_sessions": "Retour au terminal"
},
"rnprobe": {
"network_diagnostics": "Diagnostics réseau",
"title": "RNProbe - Sonde de destination",
"description": "Envoyer des sondes de taille configurable pour mesurer le RTT et la livraison.",
- "destination_hash": "Destination Hash",
+ "destination_hash": "Hash de destination",
"full_destination_name": "Nom de destination complet",
"probe_size_bytes": "Taille du son (octets)",
"number_of_probes": "Nombre de sondes",
@@ -2707,7 +2707,7 @@
"noise_floor": "Plancher de bruit",
"interference": "Interférence",
"cpu_load": "Chargement du processeur",
- "cpu_temp": "CPU Temp",
+ "cpu_temp": "Temp. CPU",
"memory_load": "Charge de mémoire",
"battery": "Batterie",
"network": "Réseau",
@@ -2782,7 +2782,7 @@
"answer_call": "Répondre à l'appel",
"decline_call": "Refuser l'appel",
"hangup_call": "Appel en attente",
- "mute_mic": "Mute Mic",
+ "mute_mic": "Couper le micro",
"unmute_mic": "Mic immuable",
"mute_speaker": "Haut-parleur",
"unmute_speaker": "Haut-parleur",
@@ -2807,7 +2807,7 @@
"tts_speed": "TTS Vitesse",
"tts_pitch": "TTS Emplacement",
"tts_voice": "TTS Voix",
- "tts_word_gap": "TTS Word Gap",
+ "tts_word_gap": "Intervalle de mots TTS",
"save_and_generate": "Enregistrer & générer",
"generating": "Générer...",
"preview_greeting": "Prévisualisation Salutation",
@@ -2824,8 +2824,8 @@
"local_tx": "Local (TX)",
"download_rx": "Télécharger RX",
"download_tx": "Télécharger TX",
- "minimize": "Minimize",
- "active": "Active",
+ "minimize": "Réduire",
+ "active": "Actif",
"default_quality": "Qualité par défaut",
"active_call": "Appel actif",
"status": "État",
@@ -3031,7 +3031,7 @@
"documentation": "Documentation",
"documentation_desc": "Lisez la documentation officielle MeshChatX et Reticulum.",
"documentation_desc_page": "Guides pour MeshChatX et la pile Reticulum.",
- "meshchatx_docs": "MeshChatX Docs",
+ "meshchatx_docs": "Documentation MeshChatX",
"reticulum_docs": "Docs de réticulum",
"read_meshchatx_docs": "Lire les docs MeshChatX",
"reticulum_manual": "Manuel du réseau Reticulum",
@@ -3099,10 +3099,10 @@
"bootstrap_added": "Ajout de l'interface de bootstrap{count}",
"bootstrap_pick_at_least_one": "Choisir au moins un nœud bootstrap",
"failed_add_bootstrap": "Impossible d'ajouter l'interface bootstrap",
- "failed_add_bootstrap_none": "No bootstrap interfaces were added. Check your selection and try again.",
- "failed_save_bootstrap_only": "Failed to save bootstrap-only preference",
- "failed_enable_propagation": "Failed to enable auto-propagation",
- "connect_mode_required": "Choose a connection mode to continue",
+ "failed_add_bootstrap_none": "Aucune interface bootstrap n'a été ajoutée. Vérifiez votre sélection et réessayez.",
+ "failed_save_bootstrap_only": "Échec de l'enregistrement de la préférence bootstrap uniquement",
+ "failed_enable_propagation": "Échec de l'activation de l'auto-propagation",
+ "connect_mode_required": "Choisissez un mode de connexion pour continuer",
"local_added": "Local AutoInterface ajouté",
"failed_add_local": "Impossible d'ajouter l'interface locale",
"failed_reload_rns": "Impossible de redémarrer Reticulum",
@@ -3155,7 +3155,7 @@
"nav_forwarder_desc": "Règles de transmission LXMF",
"nav_documentation": "Documentation",
"nav_documentation_desc": "Manuels hors ligne",
- "nav_repository_server": "Repository server",
+ "nav_repository_server": "Serveur de dépôt",
"nav_repository_server_desc": "Wheels MeshChatX, paquets Reticulum et vos fichiers en HTTP",
"nav_micron_editor": "Éditeur de microns",
"nav_micron_editor_desc": "Modifier le balisage micron",
@@ -3356,20 +3356,20 @@
"presence_connection": "{count} événements de connexion"
},
"android_storage": {
- "setup_title": "Choose where MeshChatX stores data",
- "setup_desc": "File-manager storage is recommended. You can browse and back up your identity and messages under Android/data/com.meshchatx/files/. The app restarts when you change this during setup.",
- "setup_external_title": "File-manager storage (recommended)",
- "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — visible in many file managers.",
- "setup_internal_title": "Private app storage",
- "setup_internal_desc": "Hidden from file managers; only this app can access it.",
- "setup_continue": "Continue",
- "upgrade_title": "Move data to file-manager storage?",
- "upgrade_desc": "Your MeshChatX data is in private app storage. Copy it to the file-manager folder so you can browse and back up files, then restart the app.",
- "upgrade_copy": "Copy and restart",
- "upgrade_stay_internal": "Stay on private storage",
- "working": "Preparing…",
- "copy_restart_hint": "Copy scheduled. Closing the app — open MeshChatX again to finish.",
- "restart_to_apply": "Restart the app to apply your storage choice.",
- "failed": "Could not update storage location."
+ "setup_title": "Choisissez où MeshChatX stocke les données",
+ "setup_desc": "Le stockage du gestionnaire de fichiers est recommandé. Vous pouvez parcourir et sauvegarder votre identité et vos messages sous Android/data/com.meshchatx/files/. L'application redémarre lorsque vous modifiez ceci lors de la configuration.",
+ "setup_external_title": "Stockage du gestionnaire de fichiers (recommandé)",
+ "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — visible dans de nombreux gestionnaires de fichiers.",
+ "setup_internal_title": "Stockage privé de l'application",
+ "setup_internal_desc": "Caché des gestionnaires de fichiers ; seule cette application peut y accéder.",
+ "setup_continue": "Continuer",
+ "upgrade_title": "Déplacer les données vers le stockage du gestionnaire de fichiers ?",
+ "upgrade_desc": "Vos données MeshChatX sont dans le stockage privé de l'application. Copiez-les dans le dossier du gestionnaire de fichiers pour pouvoir parcourir et sauvegarder les fichiers, puis redémarrez l'application.",
+ "upgrade_copy": "Copier et redémarrer",
+ "upgrade_stay_internal": "Rester sur le stockage privé",
+ "working": "Préparation…",
+ "copy_restart_hint": "Copie programmée. Fermez l'application — ouvrez MeshChatX à nouveau pour terminer.",
+ "restart_to_apply": "Redémarrez l'application pour appliquer votre choix de stockage.",
+ "failed": "Impossible de mettre à jour l'emplacement de stockage."
}
}

diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json
index 2855441a..1e54159d 100644
--- a/meshchatx/src/frontend/locales/it.json
+++ b/meshchatx/src/frontend/locales/it.json
@@ -417,41 +417,41 @@
"telemetry_trust_grant": "Fidati per la Telemetria",
"location_manage_desc": "Gestisci come viene condivisa la tua posizione.",
"restart_rns": "Riavvia RNS",
- "flood_protection": "Flood Protection",
- "flood_protection_description": "Automatically raise the inbound stamp cost when receiving too many messages per minute from many sources. This makes coordinated spam attacks computationally expensive while keeping normal conversations affordable.",
- "flood_protection_enabled": "Enable auto-adjusting stamp cost",
- "flood_threshold": "Messages per minute threshold",
- "flood_max_stamp_cost": "Maximum stamp cost during flood",
- "flood_cooldown": "Cooldown before lowering cost (seconds)",
+ "flood_protection": "Protezione dall'inondazione",
+ "flood_protection_description": "Aumenta automaticamente il costo del timbro in entrata quando si ricevono troppi messaggi al minuto da molte fonti. Ciò rende gli attacchi spam coordinati computazionalmente costosi, mantenendo le conversazioni normali accessibili.",
+ "flood_protection_enabled": "Abilita regolazione automatica del costo del timbro",
+ "flood_threshold": "Soglia messaggi al minuto",
+ "flood_max_stamp_cost": "Costo massimo del timbro durante l'inondazione",
+ "flood_cooldown": "Tempo di attesa prima di ridurre il costo (secondi)",
"relay_chat": "Chat relay",
- "desktop_tray_enabled": "System tray integration",
- "desktop_tray_enabled_description": "Keep a tray icon so MeshChatX can hide to the background instead of quitting.",
- "desktop_close_behavior": "When closing the window",
- "desktop_close_behavior_description": "Choose whether closing the window quits, hides to the tray/taskbar, or asks each time.",
- "desktop_close_behavior_ask": "Ask every time",
- "desktop_close_behavior_quit": "Quit application",
- "desktop_close_behavior_background": "Keep running in background",
- "desktop_close_behavior_background_no_tray": "Minimize to taskbar",
- "share_reticulum_instance": "Share Reticulum Instance",
- "share_reticulum_instance_description": "Make this MeshChatX Reticulum instance available to other local programs (Sideband-style shared instance). Other apps can use connectivity without Transport enabled.",
- "obfuscate_hops": "Obfuscate Hops",
- "obfuscate_hops_description": "When enabled, Reticulum applies a random local hop delta (RNS local_hops_delta) so outbound traffic does not advertise a true zero-hop origin to the wider mesh.",
- "respond_to_probes": "Respond to Probes",
- "respond_to_probes_description": "Allow this instance to answer Reticulum probe requests from the network.",
- "enable_remote_management": "Enable Remote Management",
- "enable_remote_management_description": "Allow remote management of this Reticulum instance when configured in the RNS config.",
- "shared_instance_type": "Shared Instance Type",
- "shared_instance_type_default": "Platform default",
- "shared_instance_type_description": "Use TCP when domain sockets are unavailable (common on Android). Leave default otherwise.",
- "instance_name": "Instance Name",
- "instance_name_description": "Isolate multiple shared instances on one system. Default is usually fine.",
- "rpc_config": "RPC Access",
- "rpc_config_description": "Copy these lines into another program's [reticulum] section for full shared-instance RPC access (management, interface status, path info).",
- "rpc_config_unavailable": "RPC key is not available yet. Start Reticulum as a shared instance first.",
- "rpc_config_copied": "RPC config copied to clipboard",
- "copy_rpc_config": "Copy RPC Config",
- "connected_to_shared_instance": "This MeshChatX process is attached to an external shared Reticulum instance. Edit that instance's config to change share/RPC settings.",
- "copy_failed": "Failed to copy to clipboard",
+ "desktop_tray_enabled": "Integrazione con l'area di notifica",
+ "desktop_tray_enabled_description": "Mantieni un'icona nell'area di notifica in modo che MeshChatX possa nascondersi in background invece di uscire.",
+ "desktop_close_behavior": "Quando si chiude la finestra",
+ "desktop_close_behavior_description": "Scegli se chiudere la finestra esce dall'applicazione, la nasconde nella barra delle applicazioni/area di notifica o chiede ogni volta.",
+ "desktop_close_behavior_ask": "Chiedi ogni volta",
+ "desktop_close_behavior_quit": "Esci dall'applicazione",
+ "desktop_close_behavior_background": "Continua a funzionare in background",
+ "desktop_close_behavior_background_no_tray": "Riduci a icona sulla barra delle applicazioni",
+ "share_reticulum_instance": "Condividi istanza Reticulum",
+ "share_reticulum_instance_description": "Rendi disponibile questa istanza Reticulum di MeshChatX ad altri programmi locali (istanza condivisa stile Sideband). Altre app possono utilizzare la connettività senza Transport abilitato.",
+ "obfuscate_hops": "Offusca salti",
+ "obfuscate_hops_description": "Quando abilitato, Reticulum applica un delta di salto locale casuale (RNS local_hops_delta) in modo che il traffico in uscita non pubblicizzi un'origine a zero salti alla mesh più ampia.",
+ "respond_to_probes": "Rispondi alle sonde",
+ "respond_to_probes_description": "Consenti a questa istanza di rispondere alle richieste di sonda Reticulum dalla rete.",
+ "enable_remote_management": "Abilita gestione remota",
+ "enable_remote_management_description": "Consenti la gestione remota di questa istanza Reticulum quando configurata nel file di configurazione RNS.",
+ "shared_instance_type": "Tipo istanza condivisa",
+ "shared_instance_type_default": "Predefinito della piattaforma",
+ "shared_instance_type_description": "Usa TCP quando i socket di dominio non sono disponibili (comune su Android). Lascia l'impostazione predefinita altrimenti.",
+ "instance_name": "Nome istanza",
+ "instance_name_description": "Isola più istanze condivise su un sistema. Di solito il valore predefinito è sufficiente.",
+ "rpc_config": "Accesso RPC",
+ "rpc_config_description": "Copia queste righe nella sezione [reticulum] di un altro programma per l'accesso RPC completo all'istanza condivisa (gestione, stato interfaccia, informazioni percorso).",
+ "rpc_config_unavailable": "La chiave RPC non è ancora disponibile. Avvia prima Reticulum come istanza condivisa.",
+ "rpc_config_copied": "Configurazione RPC copiata negli appunti",
+ "copy_rpc_config": "Copia configurazione RPC",
+ "connected_to_shared_instance": "Questo processo MeshChatX è collegato a un'istanza Reticulum condivisa esterna. Modifica la configurazione di quell'istanza per cambiare le impostazioni di condivisione/RPC.",
+ "copy_failed": "Copia negli appunti fallita",
"rpc_key_hidden": "Nascosta — tocca per mostrare",
"rpc_key_show": "Mostra chiave RPC",
"rpc_key_hide": "Nascondi chiave RPC",
@@ -474,7 +474,7 @@
"refresh": "Aggiorna",
"copy": "Copia",
"copy_to_clipboard": "Copia negli appunti",
- "vacuum": "Vacuum",
+ "vacuum": "Pulisci",
"auto_recover": "Recupero Automatico",
"shutdown": "Spegni",
"acknowledge_reset": "Conferma e Reimposta",
@@ -486,14 +486,14 @@
"error": "Errore",
"success": "Successo",
"warning": "Avviso",
- "info": "Info",
+ "info": "Informazioni",
"copied": "Copiato negli appunti",
"failed_to_copy": "Impossibile copiare negli appunti",
"save_failed": "Impossibile salvare la configurazione!",
"invalid_address": "Indirizzo Non Valido",
"loading": "Caricamento...",
"ok": "OK",
- "clear": "Clear"
+ "clear": "Cancella"
},
"stickers": {
"settings_title": "Sticker",
@@ -568,7 +568,7 @@
"installed": "Pacchetto installato: importati {imported}, saltati {skipped}",
"install_failed": "Installazione pacchetto non riuscita",
"empty": "Nessun pacchetto.",
- "count_one": "{count} sticker",
+ "count_one": "{count} adesivo",
"count_other": "{count} sticker",
"stickers_in_pack": "Sticker in {title}",
"no_stickers": "Nessuno sticker in questo pacchetto."
@@ -704,21 +704,21 @@
"plugins": {
"settings": {
"title": "Plugin",
- "description": "Install, enable, and review permissions for MeshChatX plugins. ZIP and WASM installs show a confirmation dialog with permissions, signature status, and security findings.",
+ "description": "Installa, abilita e rivedi i permessi per i plugin MeshChatX. Le installazioni ZIP e WASM mostrano una finestra di conferma con permessi, stato della firma e risultati di sicurezza.",
"enable": "Abilita",
"disable": "Disabilita",
"remove": "Rimuovi",
"permissions": "Permessi",
- "install_zip": "Install plugin from ZIP or WASM bundle",
+ "install_zip": "Installa plugin da bundle ZIP o WASM",
"enabled": "Plugin abilitato",
"disabled": "Plugin disabilitato",
"removed": "Plugin rimosso",
"installed": "Plugin installato",
"auto_disabled": "Plugin disabilitato automaticamente: {reason}",
"kill_switch": "Un plugin è stato disabilitato: {reason}",
- "empty_state": "No plugins installed yet. Upload a plugin ZIP or WASM bundle to get started.",
- "drag_drop": "Drag and drop a plugin ZIP or WASM bundle here",
- "choose_file": "Choose ZIP or WASM file",
+ "empty_state": "Nessun plugin installato. Carica un bundle plugin ZIP o WASM per iniziare.",
+ "drag_drop": "Trascina qui un bundle plugin ZIP o WASM",
+ "choose_file": "Scegli file ZIP o WASM",
"confirm_remove": "Rimuovere il plugin \"{name}\"? Verranno eliminati file e dati salvati.",
"badge_enabled": "Attivo",
"badge_disabled": "Disattivo",
@@ -726,97 +726,97 @@
"badge_wasm": "WASM",
"install_failed": "Installazione plugin non riuscita: {reason}",
"installing": "Installazione plugin...",
- "badge_network": "Network",
- "network_endpoints": "Network endpoints",
- "previewing": "Reviewing plugin...",
+ "badge_network": "Rete",
+ "network_endpoints": "Endpoint di rete",
+ "previewing": "Revisione del plugin in corso...",
"badge_python": "Python",
- "badge_signed": "Signed",
- "badge_trusted": "Trusted",
- "badge_invalid_signature": "Invalid signature",
- "badge_tampered": "Tampered"
+ "badge_signed": "Firmato",
+ "badge_trusted": "Fidato",
+ "badge_invalid_signature": "Firma non valida",
+ "badge_tampered": "Manomesso"
},
"permissions": {
- "none": "No elevated permissions",
- "hooks.announce.received": "Receive mesh announce events",
- "hooks.rns.link.event": "Receive RNS link packet and close events",
- "managers.destinationPath.read": "Read the Reticulum path table",
- "managers.rnsLink.open": "Open RNS links to destinations",
- "managers.rnsLink.identify": "Identify on RNS links",
- "managers.rnsLink.request": "Send request/response over RNS links",
- "managers.rnsLink.send": "Send packets over RNS links",
- "managers.rnsLink.close": "Close RNS links",
- "storage.isolated": "Use isolated plugin storage",
- "network.fetch": "Make outbound internet HTTP requests"
+ "none": "Nessun permesso elevato",
+ "hooks.announce.received": "Ricevi eventi di annuncio mesh",
+ "hooks.rns.link.event": "Ricevi eventi di pacchetto e chiusura collegamento RNS",
+ "managers.destinationPath.read": "Leggi la tabella dei percorsi Reticulum",
+ "managers.rnsLink.open": "Apri collegamenti RNS verso destinazioni",
+ "managers.rnsLink.identify": "Identifica sui collegamenti RNS",
+ "managers.rnsLink.request": "Invia richiesta/risposta tramite collegamenti RNS",
+ "managers.rnsLink.send": "Invia pacchetti tramite collegamenti RNS",
+ "managers.rnsLink.close": "Chiudi collegamenti RNS",
+ "storage.isolated": "Usa archiviazione isolata per plugin",
+ "network.fetch": "Effettua richieste HTTP internet in uscita"
},
"install_dialog": {
- "title": "Install plugin",
- "network_title": "Install plugin with network access",
- "message": "Review permissions for \"{name}\" ({id}) before installing.",
- "permissions": "Requested permissions",
- "permissions_hint": "Uncheck any permission you do not want to grant. Denied capabilities stay unavailable at runtime.",
- "grant": "Allow",
- "network_endpoints": "External network endpoints",
- "network_endpoints_blocked": "Network access is not granted. These URLs will remain blocked.",
- "network_endpoints_unknown": "This plugin requests network access but did not declare specific endpoints.",
- "cancel": "Cancel",
- "confirm": "Install",
- "close": "Close",
- "signature": "Signature",
- "signature_unsigned": "Unsigned",
- "signature_signed": "Signed",
- "signature_trusted": "Trusted publisher",
- "signature_invalid": "Invalid signature (install blocked)",
- "trust_publisher": "Trust this publisher",
- "security_findings": "Security findings"
+ "title": "Installa plugin",
+ "network_title": "Installa plugin con accesso alla rete",
+ "message": "Rivedi le autorizzazioni per \"{name}\" ({id}) prima di installare.",
+ "permissions": "Autorizzazioni richieste",
+ "permissions_hint": "Deseleziona le autorizzazioni che non vuoi concedere. Le capacità negate rimarranno non disponibili in esecuzione.",
+ "grant": "Consenti",
+ "network_endpoints": "Endpoint di rete esterni",
+ "network_endpoints_blocked": "L'accesso alla rete non è concesso. Questi URL rimarranno bloccati.",
+ "network_endpoints_unknown": "Questo plugin richiede accesso alla rete ma non ha dichiarato endpoint specifici.",
+ "cancel": "Annulla",
+ "confirm": "Installa",
+ "close": "Chiudi",
+ "signature": "Firma",
+ "signature_unsigned": "Non firmato",
+ "signature_signed": "Firmato",
+ "signature_trusted": "Editore attendibile",
+ "signature_invalid": "Firma non valida (installazione bloccata)",
+ "trust_publisher": "Fidati di questo editore",
+ "security_findings": "Risultati di sicurezza"
},
"sideband": {
- "title": "Sideband plugins",
- "description": "Optional Sideband-compatible Python plugins loaded from a directory. They run in-process with full host access when enabled.",
- "master_enable": "Enable Sideband plugin loader (dangerous)",
- "command_enable": "Enable Sideband command plugins",
- "path": "Plugin directory path",
- "save": "Save Sideband settings",
- "reload": "Reload Sideband plugins",
- "loaded": "Loaded Sideband plugins",
- "saved": "Sideband plugin settings saved",
- "reloaded": "Sideband plugins reloaded",
- "danger_confirm": "Sideband plugins run as full Python code inside MeshChatX with filesystem, network, and LXMF access. Enable only if you trust every script in the directory."
+ "title": "Plugin Sideband",
+ "description": "Plugin Python opzionali compatibili con Sideband caricati da una directory. Vengono eseguiti in-process con accesso completo all'host quando abilitati.",
+ "master_enable": "Abilita caricatore plugin Sideband (pericoloso)",
+ "command_enable": "Abilita plugin comando Sideband",
+ "path": "Percorso directory plugin",
+ "save": "Salva impostazioni Sideband",
+ "reload": "Ricarica plugin Sideband",
+ "loaded": "Plugin Sideband caricati",
+ "saved": "Impostazioni plugin Sideband salvate",
+ "reloaded": "Plugin Sideband ricaricati",
+ "danger_confirm": "I plugin Sideband vengono eseguiti come codice Python completo all'interno di MeshChatX con accesso a filesystem, rete e LXMF. Abilita solo se ti fidi di ogni script nella directory."
}
},
"selftest": {
"title": "Self-Test del Sistema",
- "description": "Run diagnostic checks for the network stack, database, identity, imports, storage, LXMF, subprocess/run-module, SQLite, identity files, loopback TCP, unicode paths, RNode helpers, bot launcher argv, HTTP status/config/health/auth/bots/security/interfaces/reticulum-instance/identities/favourites/telephone/plugins/sideband/RRC APIs, plugin runtime, WebSocket, RNS Link API, and bot lifecycle.",
+ "description": "Esegue controlli diagnostici per lo stack di rete, database, identità, importazioni, archiviazione, LXMF, subprocess/run-module, SQLite, file di identità, TCP loopback, percorsi unicode, helper RNode, argv del launcher bot, API HTTP status/config/health/auth/bots/security/interfaces/reticulum-instance/identities/favourites/telephone/plugins/sideband/RRC, runtime plugin, WebSocket, API RNS Link e ciclo di vita dei bot.",
"run_test_btn": "Esegui Diagnostica",
"running": "Esecuzione Diagnostica...",
"stack_up": "Stack di Rete",
"config_good": "Integrità Configurazione",
"db_good": "Connessione Database",
"read_write": "Lettura/Scrittura Archivio",
- "identity_good": "Identity Loaded",
- "imports_good": "Critical Imports",
- "storage_lock_good": "Storage Lock",
- "temp_fs_good": "Temp Filesystem",
- "public_assets_good": "Public Assets",
- "lxmf_router_good": "LXMF Router",
- "subprocess_good": "Subprocess Spawn",
- "run_module_good": "MeshChatX Run-Module",
- "sqlite_roundtrip": "SQLite Roundtrip",
- "identity_roundtrip": "Identity File Roundtrip",
- "loopback_tcp": "Loopback TCP Bind",
- "unicode_path_good": "Unicode Path I/O",
- "rnode_support_good": "RNode Support Module",
- "bot_launcher_good": "Bot Launcher Argv",
- "http_status_good": "HTTP Status",
- "http_app_info_good": "HTTP App Info",
- "http_config_good": "HTTP Config",
- "http_db_health_good": "HTTP Database Health",
- "http_auth_csrf_good": "HTTP Auth CSRF",
- "http_bots_status_good": "HTTP Bots Status",
- "http_security_good": "HTTP Server Security",
- "http_interfaces_good": "HTTP RNS Interfaces",
- "http_identities_good": "HTTP Identities",
- "http_favourites_good": "HTTP Favourites",
- "http_telephone_good": "HTTP Telephone Status",
+ "identity_good": "Identità caricata",
+ "imports_good": "Import critici",
+ "storage_lock_good": "Blocco archiviazione",
+ "temp_fs_good": "Filesystem temporaneo",
+ "public_assets_good": "Asset pubblici",
+ "lxmf_router_good": "Router LXMF",
+ "subprocess_good": "Avvio sottoprocesso",
+ "run_module_good": "Modulo esecuzione MeshChatX",
+ "sqlite_roundtrip": "Roundtrip SQLite",
+ "identity_roundtrip": "Roundtrip file identità",
+ "loopback_tcp": "Bind TCP loopback",
+ "unicode_path_good": "I/O percorso Unicode",
+ "rnode_support_good": "Modulo supporto RNode",
+ "bot_launcher_good": "Argv del Launcher Bot",
+ "http_status_good": "Stato HTTP",
+ "http_app_info_good": "Informazioni App HTTP",
+ "http_config_good": "Configurazione HTTP",
+ "http_db_health_good": "Salute Database HTTP",
+ "http_auth_csrf_good": "CSRF Autenticazione HTTP",
+ "http_bots_status_good": "Stato Bot HTTP",
+ "http_security_good": "Sicurezza Server HTTP",
+ "http_interfaces_good": "Interfacce RNS HTTP",
+ "http_identities_good": "Identità HTTP",
+ "http_favourites_good": "Preferiti HTTP",
+ "http_telephone_good": "Stato telefono HTTP",
"websocket_good": "WebSocket",
"bots_lifecycle": "Bot Crea / Avvia / Ferma / Elimina",
"passed": "Superato",
@@ -824,17 +824,17 @@
"status_label": "Stato",
"reason_label": "Motivo",
"checks_completed": "Tutti i controlli sono stati superati con successo.",
- "http_reticulum_instance_good": "HTTP RNS Instance Settings",
+ "http_reticulum_instance_good": "Impostazioni Istanza RNS HTTP",
"expand_reason": "Mostra dettagli dell’errore",
"collapse_reason": "Nascondi dettagli dell’errore",
- "http_plugins_good": "HTTP Plugins API",
- "http_plugins_trust_good": "HTTP Plugin Trust List",
- "http_sideband_plugins_good": "HTTP Sideband Plugins",
- "http_sideband_config_good": "HTTP Sideband Config",
- "http_rrc_hubs_good": "HTTP RRC Hubs",
- "http_rrc_servers_good": "HTTP RRC Servers",
- "plugins_runtime_good": "Plugin Manager Runtime",
- "websocket_rns_link_good": "WebSocket RNS Link API"
+ "http_plugins_good": "API Plugin HTTP",
+ "http_plugins_trust_good": "Elenco Fiducia Plugin HTTP",
+ "http_sideband_plugins_good": "Plugin HTTP Sideband",
+ "http_sideband_config_good": "Configurazione Sideband HTTP",
+ "http_rrc_hubs_good": "Hub RRC HTTP",
+ "http_rrc_servers_good": "Server RRC HTTP",
+ "plugins_runtime_good": "Runtime gestore plugin",
+ "websocket_rns_link_good": "API collegamento WebSocket RNS"
},
"maintenance": {
"title": "Manutenzione e Dati",
@@ -921,16 +921,16 @@
"upload_key_file": "Upload key file",
"paste_base32": "Paste Base32",
"paste_base32_placeholder": "Paste your base32 identity key here...",
- "confirm_restore": "Confirm restore",
- "restoring": "Restoring...",
+ "confirm_restore": "Conferma ripristino",
+ "restoring": "Ripristino in corso...",
"identity_exported": "Identity key file exported",
"identity_copied": "Identity Base32 key copied to clipboard",
"identity_export_failed": "Failed to export identity",
"identity_copy_failed": "Failed to copy identity",
"identity_restored": "Identity imported.",
- "identity_restore_failed": "Identity restore failed",
- "no_identity_available": "No identity available",
- "message_count": "{count} messages"
+ "identity_restore_failed": "Ripristino identità fallito",
+ "no_identity_available": "Nessuna identità disponibile",
+ "message_count": "{count} messaggi"
},
"contacts": {
"title": "Contatti",
@@ -1103,7 +1103,7 @@
"failed_to_copy_label": "Copia non riuscita: {label}",
"free_space": "Spazio libero",
"identity_hash": "Hash identità",
- "journal_short": "Journal",
+ "journal_short": "Diario",
"local_snapshots_desc": "Crea punti di ripristino su disco in un dato momento.",
"local_snapshots_title": "Snapshot locali",
"lxmf_address": "Indirizzo LXMF",
@@ -1205,10 +1205,10 @@
"find_more_nodes": "Trova altri nodi",
"quick_import": "Import rapido",
"quick_import_paste_hint": "Incolla config grezza",
- "quick_import_placeholder": "[Interface Name]\ntype = TCPClientInterface\ntarget_host = 1.2.3.4",
+ "quick_import_placeholder": "[Nome Interfaccia]\ntype = TCPClientInterface\ntarget_host = 1.2.3.4",
"quick_import_apply": "Applica: {name}",
"discovered_network_name": "Nome di rete",
- "discovered_passphrase": "Passphrase",
+ "discovered_passphrase": "Frase segreta",
"discovered_copy_network_name": "Copia il nome di rete IFAC",
"discovered_copy_passphrase": "Copia la passphrase IFAC",
"discovered_use_this": "Usa questa interfaccia",
@@ -1345,41 +1345,41 @@
"geolocation_not_supported": "La geolocalizzazione non è supportata dal tuo browser",
"no_nodes_location": "Nessun nodo scoperto con posizione trovata",
"failed_fetch_nodes": "Impossibile recuperare i nodi scoperti per la mappatura",
- "share_view": "Share map view (copy links)",
- "share_message_prefix": "MeshChatX map:",
- "share_copied": "Map links copied to clipboard",
- "ping_here": "Ping here (send in chat)",
- "ping_here_toolbar": "Ping map center in chat",
- "ping_modal_title": "Send map ping",
- "ping_destination": "Destination",
- "ping_pick_conversation": "Choose a conversation",
- "ping_send": "Send ping",
- "ping_sent": "Map ping sent",
- "ping_failed": "Could not send map ping",
- "ping_invalid_destination": "Pick a valid 32-character destination hash",
- "ping_message_prefix": "MeshChatX map ping:",
- "north_up": "North is up (map not rotated)",
- "export_tile_limit_exceeded": "Too many tiles for one export. Lower max zoom or shrink the area.",
- "export_region_world": "World (low zoom)",
- "export_region_europe": "Europe",
- "export_region_north_america": "North America",
- "export_region_south_america": "South America",
+ "share_view": "Condividi vista mappa (copia link)",
+ "share_message_prefix": "Mappa MeshChatX:",
+ "share_copied": "Link mappa copiati negli appunti",
+ "ping_here": "Ping qui (invia in chat)",
+ "ping_here_toolbar": "Ping centro mappa in chat",
+ "ping_modal_title": "Invia ping sulla mappa",
+ "ping_destination": "Destinazione",
+ "ping_pick_conversation": "Scegli una conversazione",
+ "ping_send": "Invia ping",
+ "ping_sent": "Ping sulla mappa inviato",
+ "ping_failed": "Impossibile inviare il ping sulla mappa",
+ "ping_invalid_destination": "Scegli un hash di destinazione valido di 32 caratteri",
+ "ping_message_prefix": "Ping mappa MeshChatX:",
+ "north_up": "Nord in alto (mappa non ruotata)",
+ "export_tile_limit_exceeded": "Troppe tile per un singolo export. Riduci lo zoom massimo o restringi l'area.",
+ "export_region_world": "Mondo (zoom ridotto)",
+ "export_region_europe": "Europa",
+ "export_region_north_america": "Nord America",
+ "export_region_south_america": "Sud America",
"export_region_africa": "Africa",
"export_region_asia": "Asia",
"export_region_oceania": "Oceania",
"vector_exchange_title": "GeoJSON / KML / KMZ",
- "vector_exchange_merge": "Merge with existing drawings (uncheck to replace)",
+ "vector_exchange_merge": "Unisci ai disegni esistenti (deseleziona per sostituire)",
"vector_exchange_hint": "L'importazione supporta icone da vari formati inclusi GeoJSON e KML. Seleziona un disegno per vederne i metadati.",
- "vector_import_geojson": "Import GeoJSON",
- "vector_import_kml": "Import KML",
- "vector_import_kmz": "Import KMZ",
- "vector_export_geojson": "Export GeoJSON",
- "vector_export_kml": "Export KML",
- "vector_export_kmz": "Export KMZ",
- "vector_import_ok": "Imported {count} feature(s).",
- "vector_import_empty": "No features found in file.",
- "vector_import_failed": "Could not read vector file.",
- "vector_export_ok": "Export started.",
+ "vector_import_geojson": "Importa GeoJSON",
+ "vector_import_kml": "Importa KML",
+ "vector_import_kmz": "Importa KMZ",
+ "vector_export_geojson": "Esporta GeoJSON",
+ "vector_export_kml": "Esporta KML",
+ "vector_export_kmz": "Esporta KMZ",
+ "vector_import_ok": "Importate {count} caratteristica/e.",
+ "vector_import_empty": "Nessuna caratteristica trovata nel file.",
+ "vector_import_failed": "Impossibile leggere il file vettoriale.",
+ "vector_export_ok": "Esportazione avviata.",
"drop_geo_files": "Rilascia il file della mappa qui",
"drop_map_files_hint": "GeoJSON, KML, KMZ o MBTiles",
"drop_no_geo_files": "Nessun file GeoJSON, KML o KMZ rilevato.",
@@ -1402,7 +1402,7 @@
"bandwidth": "Larghezza di banda",
"txpower": "Potenza TX",
"spreading_factor": "SF",
- "coding_rate": "Coding Rate",
+ "coding_rate": "Codifica",
"bitrate": "Bitrate",
"tx": "TX",
"rx": "RX",
@@ -1475,7 +1475,7 @@
"outbound_preparing_message": "Preparazione messaggio…",
"outbound_preparing_message_short": "Preparazione messaggio",
"outbound_sending_with_progress": "Invio… {progress}%",
- "transfer_progress_hop_one": "1 hop",
+ "transfer_progress_hop_one": "1 salto",
"transfer_progress_hops": "{count} hop",
"outbound_sending_short": "Invio",
"outbound_pending": "In attesa",
@@ -1564,11 +1564,11 @@
"failed_copy_message": "Impossibile copiare il messaggio",
"failed_send_ingest": "Impossibile inviare la richiesta di ingest",
"address_copied": "Il tuo indirizzo LXMF è stato copiato negli appunti",
- "map_link_share_title": "Shared map view",
- "map_link_ping_title": "Map ping",
- "map_link_open": "Open on map",
- "map_link_copy_uri": "Copy meshchatx link",
- "map_link_copied": "Map link copied",
+ "map_link_share_title": "Vista mappa condivisa",
+ "map_link_ping_title": "Ping mappa",
+ "map_link_open": "Apri sulla mappa",
+ "map_link_copy_uri": "Copia link meshchatx",
+ "map_link_copied": "Link mappa copiato",
"hash_copied": "Hash identità copiato negli appunti",
"failed_to_copy_hash": "Impossibile copiare l'hash identità",
"copy_hash": "Copia hash",
@@ -1626,9 +1626,9 @@
"failed_delete_conversation": "impossibile eliminare la conversazione",
"delete_history_confirm": "Sei sicuro di voler eliminare tutti i messaggi in questa conversazione? L'azione non può essere annullata!",
"failed_delete_history": "impossibile eliminare la cronologia",
- "pin_conversation": "Pin conversation",
- "unpin_conversation": "Unpin conversation",
- "failed_toggle_pin": "Could not update pin",
+ "pin_conversation": "Appunta conversazione",
+ "unpin_conversation": "Rimuovi conversazione",
+ "failed_toggle_pin": "Impossibile aggiornare il pin",
"invalid_destination_hash": "Hash di destinazione non valido",
"invalid_destination_hash_format": "Formato hash di destinazione non valido",
"ping_failed": "Ping fallito. Riprova più tardi",
@@ -1642,23 +1642,23 @@
"snr_val": "SNR: {snr}dB",
"reply": "Rispondi",
"replying_to": "In risposta a",
- "forward_banner_label": "Forwarded message",
- "forward_you_shared": "You're forwarding this quote",
- "forward_pick_recipient_title": "Forward to contact",
- "forward_message": "Forward",
- "forward_sent": "Message forwarded",
- "forward_failed": "Could not forward message",
- "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
- "forward_verify_show": "Source and verification",
- "forward_verify_hide": "Hide verification",
+ "forward_banner_label": "Messaggio inoltrato",
+ "forward_you_shared": "Stai inoltrando questa citazione",
+ "forward_pick_recipient_title": "Inoltra a contatto",
+ "forward_message": "Inoltra",
+ "forward_sent": "Messaggio inoltrato",
+ "forward_failed": "Impossibile inoltrare il messaggio",
+ "forward_no_lxmf_destination": "Questo contatto non ha un indirizzo di consegna LXMF utilizzabile.",
+ "forward_verify_show": "Sorgente e verifica",
+ "forward_verify_hide": "Nascondi verifica",
"forward_verify_explanation": "I link Paper LXMF funzionano solo se il messaggio completo è disponibile e rientra nei limiti di Paper. Le citazioni possono essere falsificate.",
- "forward_verify_loading": "Looking up verification URI…",
- "forward_verify_open_uri": "Open verification URI",
- "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
- "forward_verify_not_cached": "Original message bytes are not cached here.",
- "forward_verify_failed": "Verification lookup failed.",
- "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
- "forward_open_party_is_self": "That is your own address.",
+ "forward_verify_loading": "Ricerca URI di verifica…",
+ "forward_verify_open_uri": "Apri URI di verifica",
+ "forward_verify_unavailable": "I byte del messaggio originale non sono memorizzati nella cache qui, quindi non è stato possibile creare un URI di verifica.",
+ "forward_verify_not_cached": "I byte del messaggio originale non sono memorizzati nella cache qui.",
+ "forward_verify_failed": "Ricerca di verifica fallita.",
+ "forward_content_stub": "_Inoltrato tramite MeshChatX_\nAllegati e testo citato appartengono al mittente originale.",
+ "forward_open_party_is_self": "Questo è il tuo stesso indirizzo.",
"message_actions": "Azioni messaggio",
"save_image_to_device": "Salva immagine sul dispositivo",
"cancel_send": "Annulla invio",
@@ -1730,22 +1730,22 @@
"micron_wasm_update_toast_uploaded": "WASM installato dal tuo file.",
"micron_wasm_update_toast_reverted": "Ripristinato il WASM Micron incluso nell’app.",
"tabs": {
- "general": "General",
- "general_desc": "Language, appearance, and platform",
- "messages": "Messages",
- "messages_desc": "LXMF, stickers, and safety",
- "network": "Network",
- "network_desc": "Transport, interfaces, and discovery",
+ "general": "Generale",
+ "general_desc": "Lingua, aspetto e piattaforma",
+ "messages": "Messaggi",
+ "messages_desc": "LXMF, adesivi e sicurezza",
+ "network": "Rete",
+ "network_desc": "Trasporto, interfacce e scoperta",
"nomad": "Nomad",
- "nomad_desc": "Archiver and page rendering",
+ "nomad_desc": "Archiviatore e rendering pagine",
"privacy": "Privacy",
- "privacy_desc": "Data, access, and security",
- "maintenance": "Maintenance",
- "maintenance_desc": "Cleanup, export, and import",
+ "privacy_desc": "Dati, accesso e sicurezza",
+ "maintenance": "Manutenzione",
+ "maintenance_desc": "Pulizia, esportazione e importazione",
"plugins": "Plugin",
"plugins_desc": "Installa e gestisci i plugin di MeshChatX"
},
- "failed_update_reticulum_instance": "Failed to update Reticulum instance settings!"
+ "failed_update_reticulum_instance": "Impossibile aggiornare le impostazioni dell'istanza Reticulum!"
},
"debug": {
"title": "Log di Debug",
@@ -1922,10 +1922,10 @@
"multiline_hint": "Premi di nuovo Invio per espandere su più righe",
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
- "renderer_chip_plaintext": "Text",
- "renderer_hint_markdown": "Markdown renderer",
- "renderer_hint_html": "Sanitized HTML",
- "renderer_hint_plaintext": "Escaped plain text",
+ "renderer_chip_plaintext": "Testo",
+ "renderer_hint_markdown": "Renderer Markdown",
+ "renderer_hint_html": "HTML sanificato",
+ "renderer_hint_plaintext": "Testo semplice con escape",
"load_phase_default": "Caricamento pagina",
"load_phase_finding_path": "Ricerca del percorso di rete verso il nodo",
"load_phase_establishing_link": "Connessione al nodo in corso",
@@ -2010,21 +2010,21 @@
"page_of": "Pagina {page} di {total_pages}",
"export_mu": "Esporta .mu",
"export_selected_mu": "Esporta .mu ({count})",
- "nodes_title": "Nodes",
- "snapshots_title": "Snapshots",
- "select_all": "Select all",
- "delete_selected": "Delete ({count})",
- "viewing_archive": "Viewing archive",
- "select_snapshot": "Select a snapshot to view",
- "open_live": "Open live",
- "search_nodes_placeholder": "Search nodes or content...",
- "no_results": "No results found",
- "no_archives": "No archives yet",
- "show_nodes": "Show nodes",
- "hide_nodes": "Hide nodes",
- "show_snapshots": "Show snapshots",
- "hide_snapshots": "Hide snapshots",
- "delete_snapshot": "Delete snapshot"
+ "nodes_title": "Nodi",
+ "snapshots_title": "Snapshot",
+ "select_all": "Seleziona tutto",
+ "delete_selected": "Elimina ({count})",
+ "viewing_archive": "Visualizzazione archivio",
+ "select_snapshot": "Seleziona uno snapshot da visualizzare",
+ "open_live": "Apri live",
+ "search_nodes_placeholder": "Cerca nodi o contenuti...",
+ "no_results": "Nessun risultato trovato",
+ "no_archives": "Nessun archivio ancora",
+ "show_nodes": "Mostra nodi",
+ "hide_nodes": "Nascondi nodi",
+ "show_snapshots": "Mostra snapshot",
+ "hide_snapshots": "Nascondi snapshot",
+ "delete_snapshot": "Elimina snapshot"
},
"docs": {
"title": "Documentazione",
@@ -2107,7 +2107,7 @@
},
"rnsh": {
"title": "RNSH",
- "description": "Manage persistent rnsh sessions"
+ "description": "Gestisci sessioni rnsh persistenti"
},
"rnstatus": {
"title": "RNStatus",
@@ -2209,88 +2209,88 @@
"flow_no_rules": "Nessuna regola"
},
"message_blocklist": {
- "title": "Message blocklist",
- "description": "Auto-banish senders when their message or name matches a word or regex from your shared blocklist.",
- "beta_notice_title": "Beta (work in progress)",
- "beta_notice_body": "This tool is off until you turn it on. Words match regardless of case. Regex uses normal patterns. If something matches, the sender gets banished right away. Export a list to share with your group, or import one to merge or replace yours.",
- "enable_label": "Enable message blocklist",
- "enable_hint": "When disabled, entries are saved but no automatic banish runs.",
- "entries_heading": "Blocked phrases",
- "add_entry": "Add phrase",
- "empty_entries": "No phrases yet. Add entries or import a shared list.",
- "entry_enabled": "Active",
- "entry_placeholder": "spam phrase or regex pattern",
- "remove_entry": "Remove",
- "scope_label": "Applies to",
- "scope_everyone": "Everyone",
- "scope_contacts": "Contacts only",
- "scope_non_contacts": "Non-contacts only",
- "match_in_label": "Match in",
- "match_message": "Message title and body",
- "match_peer_fields": "Peer display name and contact fields",
- "match_mode_substring": "Word",
+ "title": "Blocco messaggi",
+ "description": "Bandisci automaticamente i mittenti quando il loro messaggio o nome corrisponde a una parola o regex dalla tua lista di blocco condivisa.",
+ "beta_notice_title": "Beta (lavori in corso)",
+ "beta_notice_body": "Questo strumento è disattivato finché non lo attivi. Le parole corrispondono indipendentemente dalle maiuscole. Le regex usano pattern normali. Se qualcosa corrisponde, il mittente viene bandito immediatamente. Esporta un elenco per condividerlo con il tuo gruppo, o importane uno per unire o sostituire il tuo.",
+ "enable_label": "Abilita lista di blocco messaggi",
+ "enable_hint": "Quando disattivata, le voci vengono salvate ma non viene eseguito alcun bando automatico.",
+ "entries_heading": "Frasi bloccate",
+ "add_entry": "Aggiungi frase",
+ "empty_entries": "Nessuna frase ancora. Aggiungi voci o importa una lista condivisa.",
+ "entry_enabled": "Attivo",
+ "entry_placeholder": "frase spam o pattern regex",
+ "remove_entry": "Rimuovi",
+ "scope_label": "Applica a",
+ "scope_everyone": "Tutti",
+ "scope_contacts": "Solo contatti",
+ "scope_non_contacts": "Solo non contatti",
+ "match_in_label": "Corrispondenza in",
+ "match_message": "Titolo e corpo del messaggio",
+ "match_peer_fields": "Nome visualizzato peer e campi contatto",
+ "match_mode_substring": "Parola",
"match_mode_regex": "Regex",
- "export": "Export",
- "import": "Import",
- "save": "Save",
- "saving": "Saving…",
- "revert": "Reload",
- "saved": "Blocklist saved",
- "save_failed": "Could not save blocklist",
- "load_failed": "Could not load blocklist",
- "enabled_toast": "Message blocklist enabled",
- "disabled_toast": "Message blocklist disabled",
- "exported": "Blocklist exported",
- "export_failed": "Could not export blocklist",
- "import_merge_confirm": "Merge with your current list? Choose Cancel to replace your list entirely.",
- "imported_merge": "Blocklist merged",
- "imported_replace": "Blocklist replaced",
- "import_failed": "Could not import blocklist"
+ "export": "Esporta",
+ "import": "Importa",
+ "save": "Salva",
+ "saving": "Salvataggio…",
+ "revert": "Ricarica",
+ "saved": "Lista di blocco salvata",
+ "save_failed": "Impossibile salvare la lista di blocco",
+ "load_failed": "Impossibile caricare la lista di blocco",
+ "enabled_toast": "Lista di blocco messaggi attivata",
+ "disabled_toast": "Lista di blocco messaggi disattivata",
+ "exported": "Lista di blocco esportata",
+ "export_failed": "Impossibile esportare la lista di blocco",
+ "import_merge_confirm": "Unire con la tua lista attuale? Scegli Annulla per sostituire completamente la tua lista.",
+ "imported_merge": "Lista di blocco unita",
+ "imported_replace": "Lista di blocco sostituita",
+ "import_failed": "Impossibile importare la lista di blocco"
},
"repository_server": {
"title": "Server repository",
"description": "Ridistribuisci le wheel Python di MeshChatX e dell'ecosistema Reticulum, più i tuoi file, su HTTP in chiaro così altri sulla tua rete o su questo dispositivo possono scaricarli.",
"subtitle": "Aggiorna i pacchetti software inclusi, aggiungi i tuoi file o avvia una pagina di download per altri dispositivi.",
- "back_tools": "Back to tools",
- "http_heading": "Plain HTTP mirror",
- "host_label": "Listen address",
- "port_label": "Port",
- "start_http": "Start",
- "stop_http": "Stop",
- "restart_http": "Restart",
- "http_listen_label": "Listening:",
- "open_http": "Open in browser",
- "http_started": "HTTP server started",
- "http_stopped": "HTTP server stopped",
- "http_restarted": "HTTP server restarted",
- "http_err_generic": "HTTP server request failed",
- "http_err_invalid_host": "Invalid listen address",
- "http_err_invalid_port": "Invalid port",
- "http_err_already_running": "HTTP server is already running",
- "http_err_bind_failed": "Could not bind (port in use or permission denied)",
- "upload_heading": "Upload file",
- "choose_file": "Choose file",
- "refresh_bundled_tooltip": "Download bundled wheels to this device (needs network)",
- "refresh_started": "Downloading bundled packages…",
- "refresh_fetching": "Getting {pkg}…",
- "refresh_ok": "Bundled wheels refreshed",
- "refresh_ok_count": "{n} packages downloaded",
- "refresh_failed": "Could not refresh bundled wheels",
- "refresh_pip_missing": "pip was not found on this system. Install pip and try again.",
- "refresh_partial": "Some packages could not be downloaded (details below)",
- "refresh_partial_toast": "Bundled download finished with some failures",
- "files_heading": "Files",
- "col_name": "Name",
- "col_source": "Source",
- "col_size": "Size",
- "empty": "No files yet. Upload a file or refresh bundled wheels.",
- "delete": "Delete",
- "delete_confirm": "Delete uploaded file \"{name}\"?",
- "delete_ok": "File removed",
- "delete_failed": "Could not delete file",
- "upload_ok": "File uploaded",
- "upload_failed": "Upload failed",
- "load_failed": "Could not load repository"
+ "back_tools": "Torna agli strumenti",
+ "http_heading": "Mirror HTTP semplice",
+ "host_label": "Indirizzo di ascolto",
+ "port_label": "Porta",
+ "start_http": "Avvia",
+ "stop_http": "Ferma",
+ "restart_http": "Riavvia",
+ "http_listen_label": "In ascolto:",
+ "open_http": "Apri nel browser",
+ "http_started": "Server HTTP avviato",
+ "http_stopped": "Server HTTP fermato",
+ "http_restarted": "Server HTTP riavviato",
+ "http_err_generic": "Richiesta al server HTTP fallita",
+ "http_err_invalid_host": "Indirizzo di ascolto non valido",
+ "http_err_invalid_port": "Porta non valida",
+ "http_err_already_running": "Il server HTTP è già in esecuzione",
+ "http_err_bind_failed": "Impossibile associare (porta in uso o permesso negato)",
+ "upload_heading": "Carica file",
+ "choose_file": "Scegli file",
+ "refresh_bundled_tooltip": "Scarica i pacchetti predefiniti su questo dispositivo (richiede rete)",
+ "refresh_started": "Download dei pacchetti in bundle…",
+ "refresh_fetching": "Ricezione di {pkg}…",
+ "refresh_ok": "Pacchetti predefiniti aggiornati",
+ "refresh_ok_count": "{n} pacchetti scaricati",
+ "refresh_failed": "Impossibile aggiornare i pacchetti predefiniti",
+ "refresh_pip_missing": "pip non è stato trovato su questo sistema. Installa pip e riprova.",
+ "refresh_partial": "Alcuni pacchetti non possono essere scaricati (dettagli sotto)",
+ "refresh_partial_toast": "Scaricamento pacchetti predefiniti completato con alcuni errori",
+ "files_heading": "File",
+ "col_name": "Nome",
+ "col_source": "Origine",
+ "col_size": "Dimensione",
+ "empty": "Nessun file ancora. Carica un file o aggiorna i pacchetti predefiniti.",
+ "delete": "Elimina",
+ "delete_confirm": "Eliminare il file caricato \"{name}\"?",
+ "delete_ok": "File rimosso",
+ "delete_failed": "Impossibile eliminare il file",
+ "upload_ok": "File caricato",
+ "upload_failed": "Caricamento fallito",
+ "load_failed": "Impossibile caricare il repository"
},
"rnode_flasher": {
"title": "Flasher RNode",
@@ -2310,7 +2310,7 @@
"find_device_issue": "Non trovi il tuo dispositivo? Apri una segnalazione su",
"select_firmware": "2. Seleziona il firmware da flashare (.zip)",
"flash_now": "Flasha Ora",
- "flashing": "Flashing: {percentage}%",
+ "flashing": "Scrittura: {percentage}%",
"flashing_file_progress": "File {current}/{total}: {percentage}%",
"connecting_device": "Connessione al dispositivo...",
"download_firmware": "Scarica Firmware",
@@ -2341,7 +2341,7 @@
"detect_rnode": "Rileva RNode",
"reboot_rnode": "Riavvia RNode",
"read_display": "Leggi Display",
- "dump_eeprom": "Dump EEPROM",
+ "dump_eeprom": "Scarica EEPROM",
"wipe_eeprom": "Cancella EEPROM",
"eeprom_console_hint": "I dump della EEPROM sono mostrati nella console degli strumenti per sviluppatori.",
"configure_bluetooth": "Configura Bluetooth (opzionale)",
@@ -2362,7 +2362,7 @@
"frequency": "Frequenza (Hz)",
"bandwidth": "Larghezza di banda",
"tx_power": "Potenza Tx (dBm)",
- "spreading_factor": "Spreading Factor",
+ "spreading_factor": "Fattore di spreading",
"coding_rate": "Coding Rate",
"configure_display": "Configura Display",
"rotation": "Rotazione",
@@ -2402,11 +2402,11 @@
"failed_start_pairing": "Impossibile avviare l'accoppiamento: {error}",
"failed_set_rotation": "Impossibile impostare la rotazione del display: {error}",
"failed_start_reconditioning": "Impossibile avviare il ricondizionamento del display: {error}",
- "no_main_bin": "Could not locate the main firmware binary in the ZIP.",
- "invalid_host": "Please enter a valid host or IP address.",
- "bluetooth_flash_unsupported": "Bluetooth cannot be used to flash firmware. Use Serial or WiFi to flash, then return to Bluetooth for management.",
- "failed_diagnostics": "Failed to run diagnostics: {error}",
- "failed_detect_with_reason": "Failed to detect RNode: {error}"
+ "no_main_bin": "Impossibile trovare il binario principale del firmware nello ZIP.",
+ "invalid_host": "Inserisci un host o indirizzo IP valido.",
+ "bluetooth_flash_unsupported": "Bluetooth non può essere utilizzato per scrivere il firmware. Usa Serial o WiFi per scrivere, poi torna a Bluetooth per la gestione.",
+ "failed_diagnostics": "Esecuzione diagnostica fallita: {error}",
+ "failed_detect_with_reason": "Rilevamento RNode fallito: {error}"
},
"alerts": {
"firmware_downloaded": "Il firmware consigliato è stato scaricato e caricato.",
@@ -2427,65 +2427,65 @@
"bluetooth_pairing_started": "Modalità accoppiamento avviata (30s)",
"rotation_updated": "Rotazione aggiornata",
"reconditioning_started": "Ricondizionamento avviato",
- "diagnostics_healthy": "Diagnostics: device looks healthy.",
- "diagnostics_issues": "Diagnostics: {count} issue(s) detected."
+ "diagnostics_healthy": "Diagnostica: il dispositivo sembra sano.",
+ "diagnostics_issues": "Diagnostica: {count} problema(i) rilevato(i)."
},
- "simple": "Simple",
- "advanced": "Advanced",
- "original": "Original",
- "open_original_tab": "Open the original flasher in a new tab",
+ "simple": "Semplice",
+ "advanced": "Avanzate",
+ "original": "Originale",
+ "open_original_tab": "Apri il flasher originale in una nuova scheda",
"bluetooth": "Bluetooth",
- "preparing_firmware": "Preparing firmware...",
- "uploading": "Uploading: {percentage}%",
- "select_firmware_file": "Or select a firmware file (.zip)",
- "wifi_help": "The IP address of your RNode on the local network.",
- "run_diagnostics": "Diagnostics",
+ "preparing_firmware": "Preparazione del firmware...",
+ "uploading": "Caricamento: {percentage}%",
+ "select_firmware_file": "Oppure seleziona un file firmware (.zip)",
+ "wifi_help": "L'indirizzo IP del tuo RNode sulla rete locale.",
+ "run_diagnostics": "Diagnostica",
"support": {
"serial": {
- "title": "USB serial is unavailable",
- "polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
+ "title": "USB seriale non disponibile",
+ "polyfill_not_loaded": "Il polyfill USB seriale non è stato ancora caricato.",
"android_webview_no_serial": "Android non supporta Web Serial in questa vista. Usa un browser desktop o il flasher integrato.",
- "browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
- "android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
- "unknown": "USB serial cannot be initialised in this environment."
+ "browser_unsupported": "Questo browser non supporta Web Serial. Prova Chrome, Edge o un altro browser basato su Chromium.",
+ "android_use_chrome": "Su Android, apri questa pagina in Chrome per utilizzare Web Serial tramite WebUSB.",
+ "unknown": "USB seriale non può essere inizializzato in questo ambiente."
},
"bluetooth": {
- "title": "Bluetooth is unavailable",
+ "title": "Bluetooth non disponibile",
"android_bridge_not_implemented": "Web Bluetooth non è disponibile qui. Usa le impostazioni Bluetooth del sistema o un browser diverso.",
- "browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
- "insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
- "requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
- "unknown": "Bluetooth cannot be initialised in this environment."
+ "browser_unsupported": "Questo browser non supporta Web Bluetooth. Prova Chrome o Edge.",
+ "insecure_context": "Web Bluetooth richiede un contesto sicuro (HTTPS o localhost).",
+ "requires_https": "Apri il flasher tramite HTTPS o localhost per abilitare il Bluetooth.",
+ "unknown": "Bluetooth non può essere inizializzato in questo ambiente."
},
"actions": {
- "load_polyfill": "Load polyfill",
- "request_bluetooth": "Allow Bluetooth",
- "open_settings": "Open settings",
- "polyfill_loading": "Loading USB serial polyfill...",
- "bluetooth_requested": "Bluetooth permission requested."
+ "load_polyfill": "Carica polyfill",
+ "request_bluetooth": "Consenti Bluetooth",
+ "open_settings": "Apri impostazioni",
+ "polyfill_loading": "Caricamento polyfill USB seriale...",
+ "bluetooth_requested": "Autorizzazione Bluetooth richiesta."
}
},
"diagnostics": {
- "title": "Device Diagnostics",
- "healthy": "Healthy",
- "needs_attention": "Needs attention",
- "issues_detected": "Issues detected",
+ "title": "Diagnostica dispositivo",
+ "healthy": "Sano",
+ "needs_attention": "Richiede attenzione",
+ "issues_detected": "Problemi rilevati",
"firmware_version": "Firmware",
- "platform": "Platform",
- "board": "Board",
- "provisioned": "Provisioned",
- "product": "Product",
- "model": "Model",
- "firmware_hash": "FW hash",
- "target_hash": "Target hash",
+ "platform": "Piattaforma",
+ "board": "Scheda",
+ "provisioned": "Provisionato",
+ "product": "Prodotto",
+ "model": "Modello",
+ "firmware_hash": "Hash FW",
+ "target_hash": "Hash target",
"suggestions": {
- "not_provisioned": "EEPROM is not provisioned. Run step 3 (Provision EEPROM).",
- "firmware_hash_missing": "Firmware hash is missing. Run step 4 (Set Firmware Hash).",
- "firmware_hash_mismatch": "Firmware hash mismatch. Re-flash the firmware and re-run step 4.",
- "product_mismatch": "Selected product does not match the connected device.",
- "no_firmware_version": "Could not read firmware version. Try reconnecting the device.",
- "detect_failed": "Could not detect this RNode. Verify cable, port, and power.",
- "read_timeout": "Device did not respond in time. Try reconnecting or rebooting it."
+ "not_provisioned": "EEPROM non provisionata. Esegui il passaggio 3 (Provisiona EEPROM).",
+ "firmware_hash_missing": "Hash del firmware mancante. Esegui il passaggio 4 (Imposta hash firmware).",
+ "firmware_hash_mismatch": "Mancata corrispondenza dell'hash del firmware. Riscrivi il firmware ed esegui nuovamente il passaggio 4.",
+ "product_mismatch": "Il prodotto selezionato non corrisponde al dispositivo collegato.",
+ "no_firmware_version": "Impossibile leggere la versione del firmware. Prova a riconnettere il dispositivo.",
+ "detect_failed": "Impossibile rilevare questo RNode. Verifica cavo, porta e alimentazione.",
+ "read_timeout": "Il dispositivo non ha risposto in tempo. Prova a riconnetterlo o riavviarlo."
}
}
},
@@ -2637,57 +2637,57 @@
"web_save_path_prompt": "Inserisci il percorso assoluto della cartella sulla macchina che esegue MeshChat (server) dove salvare il file recuperato:"
},
"rnsh": {
- "remote_shell": "Remote shell",
- "usage_title": "Usage",
- "usage_hint": "Create connect or listen sessions, then manage them on the Sessions tab. Output streams live while MeshChatX is running.",
- "tab_sessions": "Sessions",
- "tab_connect": "Connect",
- "tab_listen": "Listen",
- "sessions": "Sessions",
- "refresh": "Refresh",
- "name": "Session name",
- "name_placeholder": "Ops shell",
- "listen_mode": "Listen",
- "destination_hash": "Destination hash",
+ "remote_shell": "Shell remota",
+ "usage_title": "Utilizzo",
+ "usage_hint": "Crea sessioni di connessione o ascolto, poi gestiscile nella scheda Sessioni. I flussi di output sono attivi mentre MeshChatX è in esecuzione.",
+ "tab_sessions": "Sessioni",
+ "tab_connect": "Connetti",
+ "tab_listen": "Ascolta",
+ "sessions": "Sessioni",
+ "refresh": "Aggiorna",
+ "name": "Nome sessione",
+ "name_placeholder": "Shell operativa",
+ "listen_mode": "Ascolta",
+ "destination_hash": "Hash di destinazione",
"destination_placeholder": "7a55144adf826958a9529a3bcf08b149",
- "allowed_hashes": "Allowed identity hashes",
- "allowed_hashes_placeholder": "One hash per line",
- "remote_command": "Remote command",
- "default_command": "Default command",
+ "allowed_hashes": "Hash di identità consentiti",
+ "allowed_hashes_placeholder": "Un hash per riga",
+ "remote_command": "Comando remoto",
+ "default_command": "Comando predefinito",
"command_placeholder": "/bin/bash --login",
- "mirror_exit_code": "Mirror exit code (-m)",
- "no_id": "No local identity (-N)",
- "create_and_start": "Create and start",
- "session_output": "Session output",
- "no_command_yet": "No command started yet",
- "start": "Start",
- "stop": "Stop",
- "clear": "Clear",
- "remove": "Remove",
- "send_line": "Send",
- "command_input_placeholder": "Type command input...",
- "status_running": "Running",
- "status_stopped": "Stopped",
- "status_failed": "Failed",
- "no_sessions": "No sessions created yet.",
- "unnamed_session": "Unnamed session",
- "select_or_create_session": "Select or create a session to begin.",
- "no_output_yet": "No output yet.",
- "destination_required": "Destination hash is required for connect mode.",
- "session_created": "Session created",
- "session_started": "Session started",
- "session_stopped": "Session stopped",
- "session_removed": "Session removed",
- "output_cleared": "Output cleared",
+ "mirror_exit_code": "Rifletti codice di uscita (-m)",
+ "no_id": "Nessuna identità locale (-N)",
+ "create_and_start": "Crea e avvia",
+ "session_output": "Output della sessione",
+ "no_command_yet": "Nessun comando ancora avviato",
+ "start": "Avvia",
+ "stop": "Ferma",
+ "clear": "Cancella",
+ "remove": "Rimuovi",
+ "send_line": "Invia",
+ "command_input_placeholder": "Digita input comando...",
+ "status_running": "In esecuzione",
+ "status_stopped": "Fermato",
+ "status_failed": "Fallito",
+ "no_sessions": "Nessuna sessione ancora creata.",
+ "unnamed_session": "Sessione senza nome",
+ "select_or_create_session": "Seleziona o crea una sessione per iniziare.",
+ "no_output_yet": "Nessun output ancora.",
+ "destination_required": "L'hash di destinazione è obbligatorio per la modalità di connessione.",
+ "session_created": "Sessione creata",
+ "session_started": "Sessione avviata",
+ "session_stopped": "Sessione fermata",
+ "session_removed": "Sessione rimossa",
+ "output_cleared": "Output cancellato",
"title": "RNSH - Reticulum Remote Shell",
- "description": "Manage persistent rnsh sessions",
- "failed_to_load_sessions": "Failed to load RNSH sessions",
- "failed_to_create_session": "Failed to create RNSH session",
- "failed_to_start_session": "Failed to start RNSH session",
- "failed_to_stop_session": "Failed to stop RNSH session",
- "failed_to_remove_session": "Failed to remove RNSH session",
- "failed_to_clear_output": "Failed to clear RNSH output",
- "failed_to_send_input": "Failed to send RNSH input",
+ "description": "Gestisci sessioni rnsh persistenti",
+ "failed_to_load_sessions": "Impossibile caricare le sessioni RNSH",
+ "failed_to_create_session": "Impossibile creare la sessione RNSH",
+ "failed_to_start_session": "Impossibile avviare la sessione RNSH",
+ "failed_to_stop_session": "Impossibile fermare la sessione RNSH",
+ "failed_to_remove_session": "Impossibile rimuovere la sessione RNSH",
+ "failed_to_clear_output": "Impossibile cancellare l'output RNSH",
+ "failed_to_send_input": "Impossibile inviare input RNSH",
"listening_on": "In ascolto su",
"waiting_for_address": "In attesa dell'indirizzo del listener...",
"copy_address": "Copia",
@@ -2696,13 +2696,13 @@
"config_dir": "Directory di configurazione Reticulum",
"config_dir_placeholder": "Predefinito: la configurazione Reticulum dell'app",
"config_dir_hint": "Lascia vuoto per condividere l'istanza Reticulum di MeshChatX. Sovrascrivi solo per usare una directory di configurazione Reticulum separata.",
- "tab_sessions_short": "Sessions",
- "tab_connect_short": "Connect",
- "tab_listen_short": "Listen",
- "fullscreen": "Full screen",
- "exit_fullscreen": "Exit full screen",
- "show_sessions": "Sessions",
- "hide_sessions": "Back to terminal"
+ "tab_sessions_short": "Sessioni",
+ "tab_connect_short": "Connetti",
+ "tab_listen_short": "Ascolta",
+ "fullscreen": "Schermo intero",
+ "exit_fullscreen": "Esci da schermo intero",
+ "show_sessions": "Sessioni",
+ "hide_sessions": "Torna al terminale"
},
"rnprobe": {
"network_diagnostics": "Diagnostica di Rete",
@@ -2765,7 +2765,7 @@
"network": "Rete",
"incoming_announces": "Annunci in Entrata",
"outgoing_announces": "Annunci in Uscita",
- "airtime": "Airtime",
+ "airtime": "Tempo d'antenna",
"channel_load": "Carico Canale"
},
"translator": {
@@ -2876,8 +2876,8 @@
"local_tx": "Locale (TX)",
"download_rx": "Scarica RX",
"download_tx": "Scarica TX",
- "minimize": "Minimize",
- "active": "Active",
+ "minimize": "Minimizza",
+ "active": "Attivo",
"default_quality": "Qualità Predefinita",
"active_call": "Chiamata Attiva",
"status": "Stato",
@@ -3099,10 +3099,10 @@
"bootstrap_added": "Aggiunte {count} interfacce di bootstrap",
"bootstrap_pick_at_least_one": "Seleziona almeno un nodo di bootstrap",
"failed_add_bootstrap": "Impossibile aggiungere l'interfaccia di bootstrap",
- "failed_add_bootstrap_none": "No bootstrap interfaces were added. Check your selection and try again.",
- "failed_save_bootstrap_only": "Failed to save bootstrap-only preference",
- "failed_enable_propagation": "Failed to enable auto-propagation",
- "connect_mode_required": "Choose a connection mode to continue",
+ "failed_add_bootstrap_none": "Nessuna interfaccia bootstrap è stata aggiunta. Controlla la selezione e riprova.",
+ "failed_save_bootstrap_only": "Impossibile salvare la preferenza solo bootstrap",
+ "failed_enable_propagation": "Impossibile abilitare la propagazione automatica",
+ "connect_mode_required": "Scegli una modalità di connessione per continuare",
"local_added": "AutoInterface locale aggiunto",
"failed_add_local": "Impossibile aggiungere l'interfaccia locale",
"failed_reload_rns": "Impossibile riavviare Reticulum",
@@ -3147,7 +3147,7 @@
"nav_rnstatus_desc": "Statistiche interfaccia e collegamento",
"nav_rnpath": "RNPath",
"nav_rnpath_desc": "Percorsi e code di annuncio",
- "nav_rnpath_trace": "RNPath Trace",
+ "nav_rnpath_trace": "Traccia RNPath",
"nav_rnpath_trace_desc": "Elenco salti verso un hash",
"nav_translator": "Traduttore",
"nav_translator_desc": "Traduci il testo dei messaggi",
@@ -3155,7 +3155,7 @@
"nav_forwarder_desc": "Regole di inoltro LXMF",
"nav_documentation": "Documentazione",
"nav_documentation_desc": "Manuali offline",
- "nav_repository_server": "Repository server",
+ "nav_repository_server": "Server repository",
"nav_repository_server_desc": "Wheel MeshChatX, pacchetti Reticulum e i tuoi file via HTTP",
"nav_micron_editor": "Editor Micron",
"nav_micron_editor_desc": "Modifica markup Micron",
@@ -3356,20 +3356,20 @@
"presence_connection": "{count} eventi di connessione"
},
"android_storage": {
- "setup_title": "Choose where MeshChatX stores data",
- "setup_desc": "File-manager storage is recommended. You can browse and back up your identity and messages under Android/data/com.meshchatx/files/. The app restarts when you change this during setup.",
- "setup_external_title": "File-manager storage (recommended)",
- "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — visible in many file managers.",
- "setup_internal_title": "Private app storage",
- "setup_internal_desc": "Hidden from file managers; only this app can access it.",
- "setup_continue": "Continue",
- "upgrade_title": "Move data to file-manager storage?",
- "upgrade_desc": "Your MeshChatX data is in private app storage. Copy it to the file-manager folder so you can browse and back up files, then restart the app.",
- "upgrade_copy": "Copy and restart",
- "upgrade_stay_internal": "Stay on private storage",
- "working": "Preparing…",
- "copy_restart_hint": "Copy scheduled. Closing the app — open MeshChatX again to finish.",
- "restart_to_apply": "Restart the app to apply your storage choice.",
- "failed": "Could not update storage location."
+ "setup_title": "Scegli dove MeshChatX archivia i dati",
+ "setup_desc": "Si consiglia l'archiviazione tramite gestore file. Puoi sfogliare e fare il backup della tua identità e dei messaggi in Android/data/com.meshchatx/files/. L'app si riavvia quando modifichi questa impostazione durante la configurazione.",
+ "setup_external_title": "Archiviazione tramite gestore file (consigliata)",
+ "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — visibile in molti gestori file.",
+ "setup_internal_title": "Archiviazione privata dell'app",
+ "setup_internal_desc": "Nascosta ai gestori file; solo questa app può accedervi.",
+ "setup_continue": "Continua",
+ "upgrade_title": "Spostare i dati nell'archiviazione tramite gestore file?",
+ "upgrade_desc": "I tuoi dati di MeshChatX sono nell'archiviazione privata dell'app. Copiali nella cartella del gestore file per poter sfogliare e fare il backup dei file, quindi riavvia l'app.",
+ "upgrade_copy": "Copia e riavvia",
+ "upgrade_stay_internal": "Rimani su archiviazione privata",
+ "working": "Preparazione…",
+ "copy_restart_hint": "Copia programmata. Chiudi l'app — riapri MeshChatX per completare.",
+ "restart_to_apply": "Riavvia l'app per applicare la scelta di archiviazione.",
+ "failed": "Impossibile aggiornare la posizione di archiviazione."
}
}

diff --git a/meshchatx/src/frontend/locales/nl.json b/meshchatx/src/frontend/locales/nl.json
index 2e35fc9c..f73d5087 100644
--- a/meshchatx/src/frontend/locales/nl.json
+++ b/meshchatx/src/frontend/locales/nl.json
@@ -11,8 +11,8 @@
"running_bots": "Actieve bots",
"no_bots_running": "Er zijn momenteel geen bots actief.",
"select": "Selecteren",
- "start_bot": "Start Bot",
- "stop_bot": "Stop Bot",
+ "start_bot": "Bot starten",
+ "stop_bot": "Bot stoppen",
"restart_bot": "Bot opnieuw opstarten",
"saved_bots": "Opgeslagen bots",
"bot_name": "Botnaam",
@@ -30,7 +30,7 @@
"bot_deleted": "Bot is succesvol verwijderd",
"failed_to_delete": "Verwijderen van bot is mislukt",
"more_bots_coming": "Er komen nog meer bots aan.",
- "chat_with_bot": "Chat",
+ "chat_with_bot": "Chatten",
"lxmf_address": "LXMF-adres",
"last_announce": "Laatste aankondiging",
"never_announced": "Nog niet gezien op deze knooppunt",
@@ -235,7 +235,7 @@
"language": "Taal",
"select_language": "Selecteer uw gewenste taal.",
"tagline": "Alles-in-één klant van Reticulum",
- "open": "Open",
+ "open": "Openen",
"identity": "Identiteit",
"lxmf_address_hash": "LXMF Adres Hash",
"propagation_node_status": "Propagatieknooppuntstatus",
@@ -288,7 +288,7 @@
"inbound_stamp_cost_label": "Inkomende postzegelkosten",
"propagation_stamp_cost_label": "Propagatiepostzegelkosten",
"page_archiver": "Paginaarchief",
- "smart_crawler": "Smart Crawler",
+ "smart_crawler": "Slimme crawler",
"authentication": "Aanmeldingscontrole",
"stranger_protection": "Bescherming van vreemdelingen",
"stranger_protection_description": "Bepaal hoe de app berichten en bijlagen van onbekende collega's behandelt.",
@@ -406,7 +406,7 @@
"location_manual_alt": "Hoogte (m)",
"telemetry_enabled": "Telemetrie ingeschakeld",
"telemetry_description": "Laat MeshChatX telemetriegegevens verzenden en ontvangen. Dit omvat het beantwoorden van locatieverzoeken van vertrouwde collega's.",
- "telemetry_trusted_peers": "Trusted Telemetry Peers",
+ "telemetry_trusted_peers": "Vertrouwde telemetrie-peers",
"telemetry_no_trusted_peers": "Geen vertrouwde collega's geconfigureerd. Vertrouw collega's uit het chatmenu om hen in staat te stellen uw locatie te vragen.",
"telemetry_revoke_trust": "Vertrouwen herroepen",
"telemetry_trust_revoked": "Ingetrokken telemetrie vertrouwen voor{name}",
@@ -417,41 +417,41 @@
"telemetry_trust_grant": "Vertrouwen voor telemetrie",
"location_manage_desc": "Beheer hoe uw locatie wordt gedeeld.",
"restart_rns": "RNS herstarten",
- "flood_protection": "Flood Protection",
- "flood_protection_description": "Automatically raise the inbound stamp cost when receiving too many messages per minute from many sources. This makes coordinated spam attacks computationally expensive while keeping normal conversations affordable.",
- "flood_protection_enabled": "Enable auto-adjusting stamp cost",
- "flood_threshold": "Messages per minute threshold",
- "flood_max_stamp_cost": "Maximum stamp cost during flood",
- "flood_cooldown": "Cooldown before lowering cost (seconds)",
+ "flood_protection": "Overstromingsbeveiliging",
+ "flood_protection_description": "Verhoog automatisch de inkomende zegelkosten wanneer er te veel berichten per minuut van veel bronnen worden ontvangen. Dit maakt gecoördineerde spam-aanvallen rekenkundig duur, terwijl normale gesprekken betaalbaar blijven.",
+ "flood_protection_enabled": "Automatisch aanpassen van zegelkosten inschakelen",
+ "flood_threshold": "Drempelwaarde berichten per minuut",
+ "flood_max_stamp_cost": "Maximale zegelkosten tijdens overstroming",
+ "flood_cooldown": "Afkoeltijd voordat kosten worden verlaagd (seconden)",
"relay_chat": "Relaychat",
- "desktop_tray_enabled": "System tray integration",
- "desktop_tray_enabled_description": "Keep a tray icon so MeshChatX can hide to the background instead of quitting.",
- "desktop_close_behavior": "When closing the window",
- "desktop_close_behavior_description": "Choose whether closing the window quits, hides to the tray/taskbar, or asks each time.",
- "desktop_close_behavior_ask": "Ask every time",
- "desktop_close_behavior_quit": "Quit application",
- "desktop_close_behavior_background": "Keep running in background",
- "desktop_close_behavior_background_no_tray": "Minimize to taskbar",
- "share_reticulum_instance": "Share Reticulum Instance",
- "share_reticulum_instance_description": "Make this MeshChatX Reticulum instance available to other local programs (Sideband-style shared instance). Other apps can use connectivity without Transport enabled.",
- "obfuscate_hops": "Obfuscate Hops",
- "obfuscate_hops_description": "When enabled, Reticulum applies a random local hop delta (RNS local_hops_delta) so outbound traffic does not advertise a true zero-hop origin to the wider mesh.",
- "respond_to_probes": "Respond to Probes",
- "respond_to_probes_description": "Allow this instance to answer Reticulum probe requests from the network.",
- "enable_remote_management": "Enable Remote Management",
- "enable_remote_management_description": "Allow remote management of this Reticulum instance when configured in the RNS config.",
- "shared_instance_type": "Shared Instance Type",
- "shared_instance_type_default": "Platform default",
- "shared_instance_type_description": "Use TCP when domain sockets are unavailable (common on Android). Leave default otherwise.",
- "instance_name": "Instance Name",
- "instance_name_description": "Isolate multiple shared instances on one system. Default is usually fine.",
- "rpc_config": "RPC Access",
- "rpc_config_description": "Copy these lines into another program's [reticulum] section for full shared-instance RPC access (management, interface status, path info).",
- "rpc_config_unavailable": "RPC key is not available yet. Start Reticulum as a shared instance first.",
- "rpc_config_copied": "RPC config copied to clipboard",
- "copy_rpc_config": "Copy RPC Config",
- "connected_to_shared_instance": "This MeshChatX process is attached to an external shared Reticulum instance. Edit that instance's config to change share/RPC settings.",
- "copy_failed": "Failed to copy to clipboard",
+ "desktop_tray_enabled": "Systeemvakintegratie",
+ "desktop_tray_enabled_description": "Houd een systeemvakpictogram zodat MeshChatX naar de achtergrond kan worden verborgen in plaats van af te sluiten.",
+ "desktop_close_behavior": "Bij het sluiten van het venster",
+ "desktop_close_behavior_description": "Kies of het sluiten van het venster de app afsluit, verbergt naar het systeemvak/taakbalk, of elke keer vraagt.",
+ "desktop_close_behavior_ask": "Elke keer vragen",
+ "desktop_close_behavior_quit": "Applicatie afsluiten",
+ "desktop_close_behavior_background": "Op de achtergrond blijven draaien",
+ "desktop_close_behavior_background_no_tray": "Minimaliseren naar taakbalk",
+ "share_reticulum_instance": "Reticulum-instantie delen",
+ "share_reticulum_instance_description": "Maak deze MeshChatX Reticulum-instantie beschikbaar voor andere lokale programma's (Sideband-stijl gedeelde instantie). Andere apps kunnen connectiviteit gebruiken zonder Transport ingeschakeld.",
+ "obfuscate_hops": "Hops verdoezelen",
+ "obfuscate_hops_description": "Wanneer ingeschakeld, past Reticulum een willekeurige lokale hopdelta (RNS local_hops_delta) toe, zodat uitgaand verkeer geen echte nul-hop-oorsprong aan het bredere mesh-netwerk adverteert.",
+ "respond_to_probes": "Reageren op probes",
+ "respond_to_probes_description": "Sta deze instantie toe om te reageren op Reticulum-probe-verzoeken van het netwerk.",
+ "enable_remote_management": "Extern beheer inschakelen",
+ "enable_remote_management_description": "Sta extern beheer van deze Reticulum-instantie toe wanneer geconfigureerd in de RNS-configuratie.",
+ "shared_instance_type": "Type gedeelde instantie",
+ "shared_instance_type_default": "Platformstandaard",
+ "shared_instance_type_description": "Gebruik TCP wanneer domeinsockets niet beschikbaar zijn (gebruikelijk op Android). Laat anders de standaardwaarde staan.",
+ "instance_name": "Instantienaam",
+ "instance_name_description": "Isoleer meerdere gedeelde instanties op één systeem. Standaard is meestal prima.",
+ "rpc_config": "RPC-toegang",
+ "rpc_config_description": "Kopieer deze regels naar de [reticulum]-sectie van een ander programma voor volledige gedeelde-instantie RPC-toegang (beheer, interfacestatus, padinfo).",
+ "rpc_config_unavailable": "RPC-sleutel is nog niet beschikbaar. Start Reticulum eerst als een gedeelde instantie.",
+ "rpc_config_copied": "RPC-configuratie gekopieerd naar klembord",
+ "copy_rpc_config": "Kopieer RPC-configuratie",
+ "connected_to_shared_instance": "Dit MeshChatX-proces is gekoppeld aan een externe gedeelde Reticulum-instantie. Bewerk de configuratie van die instantie om share/RPC-instellingen te wijzigen.",
+ "copy_failed": "Kopiëren naar klembord mislukt",
"rpc_key_hidden": "Verborgen — tik om te tonen",
"rpc_key_show": "RPC-sleutel tonen",
"rpc_key_hide": "RPC-sleutel verbergen",
@@ -459,7 +459,7 @@
"refresh_community_interfaces_busy": "Bezig met vernieuwen…"
},
"common": {
- "open": "Open",
+ "open": "Openen",
"close": "Sluiten",
"cancel": "Annuleren",
"select": "Selecteren",
@@ -493,7 +493,7 @@
"invalid_address": "Ongeldig adres",
"loading": "Laden...",
"ok": "OK",
- "clear": "Clear"
+ "clear": "Wissen"
},
"stickers": {
"settings_title": "Stickers",
@@ -505,7 +505,7 @@
"count": "{count}opgeslagen sticker(s)",
"open_picker": "Stickers",
"picker_tooltip": "Emoji, stickers en GIF's",
- "tab_emojis": "Emojis",
+ "tab_emojis": "Emoji's",
"tab_stickers": "Stickers",
"empty_library": "Nog geen stickers.",
"drop_or_click_hint": "Laat hier afbeeldingen vallen of klik om te bladeren (PNG, JPEG, GIF, WebP, BMP, TGS, WebM, max 512 KB elk).",
@@ -526,7 +526,7 @@
"format_static": "Statisch",
"format_animated": "Geanimeerd",
"format_video": "Video",
- "format_legacy": "Legacy",
+ "format_legacy": "Verouderd",
"errors": {
"file_too_large_static": "Statische stickers moeten 512 KB of kleiner zijn.",
"file_too_large_animated": "Geanimeerde TGS-stickers moeten 64 KB of kleiner zijn.",
@@ -540,7 +540,7 @@
"invalid_webm": "Kon WebM-video niet lezen."
},
"packs": {
- "title": "Sticker packs",
+ "title": "Stickerpakketten",
"description": "Groep stickers in verpakkingen die u kunt delen of importeren.",
"create": "Nieuwe verpakking",
"create_pack": "Maak een stickerpakket aan",
@@ -578,7 +578,7 @@
"open": "Bewerker openen",
"select_image": "Afbeelding selecteren",
"drop_image": "Een afbeelding laten vallen of klikken om te bladeren",
- "reset": "Reset",
+ "reset": "Resetten",
"remove_background": "Achtergrond verwijderen",
"removing_background": "Achtergrond verwijderen...",
"white_stroke": "Witte beroerte",
@@ -649,7 +649,7 @@
},
"sticker_packs": {
"all": "Alles",
- "section_title": "Sticker packs",
+ "section_title": "Stickerpakketten",
"section_description": "Groep stickers in verpakkingen die u kunt delen of importeren.",
"create": "Nieuwe verpakking",
"open_editor": "Stickers toevoegen",
@@ -704,21 +704,21 @@
"plugins": {
"settings": {
"title": "Plugins",
- "description": "Install, enable, and review permissions for MeshChatX plugins. ZIP and WASM installs show a confirmation dialog with permissions, signature status, and security findings.",
+ "description": "Installeer, schakel in en beoordeel machtigingen voor MeshChatX-plugins. ZIP- en WASM-installaties tonen een bevestigingsdialoog met machtigingen, handtekeningstatus en beveiligingsbevindingen.",
"enable": "Inschakelen",
"disable": "Uitschakelen",
"remove": "Verwijderen",
"permissions": "Rechten",
- "install_zip": "Install plugin from ZIP or WASM bundle",
+ "install_zip": "Plugin installeren vanuit ZIP- of WASM-bundel",
"enabled": "Plugin ingeschakeld",
"disabled": "Plugin uitgeschakeld",
"removed": "Plugin verwijderd",
"installed": "Plugin geïnstalleerd",
"auto_disabled": "Plugin automatisch uitgeschakeld: {reason}",
"kill_switch": "Een plugin is uitgeschakeld: {reason}",
- "empty_state": "No plugins installed yet. Upload a plugin ZIP or WASM bundle to get started.",
- "drag_drop": "Drag and drop a plugin ZIP or WASM bundle here",
- "choose_file": "Choose ZIP or WASM file",
+ "empty_state": "Nog geen plugins geïnstalleerd. Upload een plugin-ZIP of WASM-bundel om te beginnen.",
+ "drag_drop": "Sleep een plugin-ZIP of WASM-bundel hierheen",
+ "choose_file": "Kies ZIP- of WASM-bestand",
"confirm_remove": "Plugin \"{name}\" verwijderen? Bestanden en opgeslagen gegevens worden gewist.",
"badge_enabled": "Ingeschakeld",
"badge_disabled": "Uitgeschakeld",
@@ -726,85 +726,85 @@
"badge_wasm": "WASM",
"install_failed": "Plugin-installatie mislukt: {reason}",
"installing": "Plugin installeren...",
- "badge_network": "Network",
- "network_endpoints": "Network endpoints",
- "previewing": "Reviewing plugin...",
+ "badge_network": "Netwerk",
+ "network_endpoints": "Netwerkeindpunten",
+ "previewing": "Plugin wordt beoordeeld...",
"badge_python": "Python",
- "badge_signed": "Signed",
- "badge_trusted": "Trusted",
- "badge_invalid_signature": "Invalid signature",
- "badge_tampered": "Tampered"
+ "badge_signed": "Ondertekend",
+ "badge_trusted": "Vertrouwd",
+ "badge_invalid_signature": "Ongeldige handtekening",
+ "badge_tampered": "Gemanipuleerd"
},
"permissions": {
- "none": "No elevated permissions",
- "hooks.announce.received": "Receive mesh announce events",
- "hooks.rns.link.event": "Receive RNS link packet and close events",
- "managers.destinationPath.read": "Read the Reticulum path table",
- "managers.rnsLink.open": "Open RNS links to destinations",
- "managers.rnsLink.identify": "Identify on RNS links",
- "managers.rnsLink.request": "Send request/response over RNS links",
- "managers.rnsLink.send": "Send packets over RNS links",
- "managers.rnsLink.close": "Close RNS links",
- "storage.isolated": "Use isolated plugin storage",
- "network.fetch": "Make outbound internet HTTP requests"
+ "none": "Geen verhoogde machtigingen",
+ "hooks.announce.received": "Mesh-aankondigingsgebeurtenissen ontvangen",
+ "hooks.rns.link.event": "RNS-linkpakket- en sluitgebeurtenissen ontvangen",
+ "managers.destinationPath.read": "Het Reticulum-padtabel lezen",
+ "managers.rnsLink.open": "RNS-links openen naar bestemmingen",
+ "managers.rnsLink.identify": "Identificeren op RNS-links",
+ "managers.rnsLink.request": "Verzoek/antwoord verzenden via RNS-links",
+ "managers.rnsLink.send": "Pakketten verzenden via RNS-links",
+ "managers.rnsLink.close": "RNS-links sluiten",
+ "storage.isolated": "Geïsoleerde pluginopslag gebruiken",
+ "network.fetch": "Uitgaande internet-HTTP-verzoeken doen"
},
"install_dialog": {
- "title": "Install plugin",
- "network_title": "Install plugin with network access",
- "message": "Review permissions for \"{name}\" ({id}) before installing.",
- "permissions": "Requested permissions",
- "permissions_hint": "Uncheck any permission you do not want to grant. Denied capabilities stay unavailable at runtime.",
- "grant": "Allow",
- "network_endpoints": "External network endpoints",
- "network_endpoints_blocked": "Network access is not granted. These URLs will remain blocked.",
- "network_endpoints_unknown": "This plugin requests network access but did not declare specific endpoints.",
- "cancel": "Cancel",
- "confirm": "Install",
- "close": "Close",
- "signature": "Signature",
- "signature_unsigned": "Unsigned",
- "signature_signed": "Signed",
- "signature_trusted": "Trusted publisher",
- "signature_invalid": "Invalid signature (install blocked)",
- "trust_publisher": "Trust this publisher",
- "security_findings": "Security findings"
+ "title": "Plugin installeren",
+ "network_title": "Plugin installeren met netwerktoegang",
+ "message": "Controleer machtigingen voor \"{name}\" ({id}) voordat u installeert.",
+ "permissions": "Gevraagde machtigingen",
+ "permissions_hint": "Schakel elke machtiging uit die u niet wilt verlenen. Geweigerde mogelijkheden blijven tijdens runtime niet beschikbaar.",
+ "grant": "Toestaan",
+ "network_endpoints": "Externe netwerkeindpunten",
+ "network_endpoints_blocked": "Netwerktoegang is niet verleend. Deze URL's blijven geblokkeerd.",
+ "network_endpoints_unknown": "Deze plugin vraagt netwerktoegang aan maar heeft geen specifieke eindpunten opgegeven.",
+ "cancel": "Annuleren",
+ "confirm": "Installeren",
+ "close": "Sluiten",
+ "signature": "Handtekening",
+ "signature_unsigned": "Niet ondertekend",
+ "signature_signed": "Ondertekend",
+ "signature_trusted": "Vertrouwde uitgever",
+ "signature_invalid": "Ongeldige handtekening (installatie geblokkeerd)",
+ "trust_publisher": "Deze uitgever vertrouwen",
+ "security_findings": "Beveiligingsbevindingen"
},
"sideband": {
- "title": "Sideband plugins",
- "description": "Optional Sideband-compatible Python plugins loaded from a directory. They run in-process with full host access when enabled.",
- "master_enable": "Enable Sideband plugin loader (dangerous)",
- "command_enable": "Enable Sideband command plugins",
- "path": "Plugin directory path",
- "save": "Save Sideband settings",
- "reload": "Reload Sideband plugins",
- "loaded": "Loaded Sideband plugins",
- "saved": "Sideband plugin settings saved",
- "reloaded": "Sideband plugins reloaded",
- "danger_confirm": "Sideband plugins run as full Python code inside MeshChatX with filesystem, network, and LXMF access. Enable only if you trust every script in the directory."
+ "title": "Sideband-plug-ins",
+ "description": "Optionele Sideband-compatibele Python-plug-ins geladen vanuit een map. Ze worden in-process uitgevoerd met volledige hosttoegang wanneer ingeschakeld.",
+ "master_enable": "Schakel Sideband-plug-inlader in (gevaarlijk)",
+ "command_enable": "Schakel Sideband-commando-plug-ins in",
+ "path": "Pad naar plug-inmap",
+ "save": "Sideband-instellingen opslaan",
+ "reload": "Herlaad Sideband-plug-ins",
+ "loaded": "Geladen Sideband-plug-ins",
+ "saved": "Sideband-plug-ininstellingen opgeslagen",
+ "reloaded": "Sideband-plug-ins herladen",
+ "danger_confirm": "Sideband-plug-ins worden uitgevoerd als volledige Python-code binnen MeshChatX met bestandssysteem-, netwerk- en LXMF-toegang. Schakel alleen in als u elk script in de map vertrouwt."
}
},
"selftest": {
"title": "Systeem-zelftest",
- "description": "Run diagnostic checks for the network stack, database, identity, imports, storage, LXMF, subprocess/run-module, SQLite, identity files, loopback TCP, unicode paths, RNode helpers, bot launcher argv, HTTP status/config/health/auth/bots/security/interfaces/reticulum-instance/identities/favourites/telephone/plugins/sideband/RRC APIs, plugin runtime, WebSocket, RNS Link API, and bot lifecycle.",
+ "description": "Voer diagnostische controles uit voor de netwerkstack, database, identiteit, imports, opslag, LXMF, subproces/run-module, SQLite, identiteitsbestanden, loopback TCP, unicode-paden, RNode-hulpprogramma's, bot launcher argv, HTTP-status/config/health/auth/bots/security/interfaces/reticulum-instance/identities/favourites/telephone/plugins/sideband/RRC-API's, plugin-runtime, WebSocket, RNS Link API en bot-levenscyclus.",
"run_test_btn": "Diagnostiek uitvoeren",
"running": "Diagnostiek uitvoeren...",
"stack_up": "Netwerkstack",
"config_good": "Configuratie-integriteit",
"db_good": "Databaseverbinding",
"read_write": "Opslag Lezen/Schrijven",
- "identity_good": "Identity Loaded",
- "imports_good": "Critical Imports",
- "storage_lock_good": "Storage Lock",
- "temp_fs_good": "Temp Filesystem",
- "public_assets_good": "Public Assets",
- "lxmf_router_good": "LXMF Router",
- "subprocess_good": "Subprocess Spawn",
+ "identity_good": "Identiteit geladen",
+ "imports_good": "Kritieke imports",
+ "storage_lock_good": "Opslagvergrendeling",
+ "temp_fs_good": "Tijdelijk bestandssysteem",
+ "public_assets_good": "Openbare assets",
+ "lxmf_router_good": "LXMF-router",
+ "subprocess_good": "Subproces spawnen",
"run_module_good": "MeshChatX Run-Module",
- "sqlite_roundtrip": "SQLite Roundtrip",
- "identity_roundtrip": "Identity File Roundtrip",
- "loopback_tcp": "Loopback TCP Bind",
- "unicode_path_good": "Unicode Path I/O",
- "rnode_support_good": "RNode Support Module",
+ "sqlite_roundtrip": "SQLite roundtrip",
+ "identity_roundtrip": "Identiteitsbestand roundtrip",
+ "loopback_tcp": "Loopback TCP-bind",
+ "unicode_path_good": "Unicode-pad I/O",
+ "rnode_support_good": "RNode-ondersteuningsmodule",
"bot_launcher_good": "Bot Launcher Argv",
"http_status_good": "HTTP Status",
"http_app_info_good": "HTTP App Info",
@@ -812,11 +812,11 @@
"http_db_health_good": "HTTP Database Health",
"http_auth_csrf_good": "HTTP Auth CSRF",
"http_bots_status_good": "HTTP Bots Status",
- "http_security_good": "HTTP Server Security",
+ "http_security_good": "HTTP Serverbeveiliging",
"http_interfaces_good": "HTTP RNS Interfaces",
"http_identities_good": "HTTP Identities",
"http_favourites_good": "HTTP Favourites",
- "http_telephone_good": "HTTP Telephone Status",
+ "http_telephone_good": "HTTP Telefoonstatus",
"websocket_good": "WebSocket",
"bots_lifecycle": "Bot Aanmaken / Starten / Stoppen / Verwijderen",
"passed": "Geslaagd",
@@ -830,7 +830,7 @@
"http_plugins_good": "HTTP Plugins API",
"http_plugins_trust_good": "HTTP Plugin Trust List",
"http_sideband_plugins_good": "HTTP Sideband Plugins",
- "http_sideband_config_good": "HTTP Sideband Config",
+ "http_sideband_config_good": "HTTP Sideband Configuratie",
"http_rrc_hubs_good": "HTTP RRC Hubs",
"http_rrc_servers_good": "HTTP RRC Servers",
"plugins_runtime_good": "Plugin Manager Runtime",
@@ -1199,7 +1199,7 @@
"export_area": "Uitvoergebied",
"export_instructions": "Sleep op de kaart om een gebied te selecteren.",
"min_zoom": "Min zoom",
- "max_zoom": "Max Zoom",
+ "max_zoom": "Maximale zoom",
"tile_count": "Geschatte tegels",
"start_export": "Exporteren starten",
"exporting": "Kaart exporteren...",
@@ -1293,41 +1293,41 @@
"geolocation_not_supported": "Geolocatie wordt niet ondersteund door uw browser",
"no_nodes_location": "Geen gevonden knooppunten met locatie gevonden",
"failed_fetch_nodes": "Kon ontdekte knooppunten voor het in kaart brengen niet ophalen",
- "share_view": "Share map view (copy links)",
- "share_message_prefix": "MeshChatX map:",
- "share_copied": "Map links copied to clipboard",
- "ping_here": "Ping here (send in chat)",
- "ping_here_toolbar": "Ping map center in chat",
- "ping_modal_title": "Send map ping",
- "ping_destination": "Destination",
- "ping_pick_conversation": "Choose a conversation",
- "ping_send": "Send ping",
- "ping_sent": "Map ping sent",
- "ping_failed": "Could not send map ping",
- "ping_invalid_destination": "Pick a valid 32-character destination hash",
- "ping_message_prefix": "MeshChatX map ping:",
- "north_up": "North is up (map not rotated)",
- "export_tile_limit_exceeded": "Too many tiles for one export. Lower max zoom or shrink the area.",
- "export_region_world": "World (low zoom)",
- "export_region_europe": "Europe",
- "export_region_north_america": "North America",
- "export_region_south_america": "South America",
- "export_region_africa": "Africa",
- "export_region_asia": "Asia",
- "export_region_oceania": "Oceania",
+ "share_view": "Kaartweergave delen (links kopiëren)",
+ "share_message_prefix": "MeshChatX kaart:",
+ "share_copied": "Kaartlinks gekopieerd naar klembord",
+ "ping_here": "Ping hier (verzenden in chat)",
+ "ping_here_toolbar": "Ping kaartcentrum in chat",
+ "ping_modal_title": "Kaart-ping verzenden",
+ "ping_destination": "Bestemming",
+ "ping_pick_conversation": "Kies een gesprek",
+ "ping_send": "Ping verzenden",
+ "ping_sent": "Kaart-ping verzonden",
+ "ping_failed": "Kaart-ping kon niet worden verzonden",
+ "ping_invalid_destination": "Kies een geldige 32-karakter bestemmingshash",
+ "ping_message_prefix": "MeshChatX kaart-ping:",
+ "north_up": "Noorden boven (kaart niet geroteerd)",
+ "export_tile_limit_exceeded": "Te veel tegels voor één export. Verlaag de maximale zoom of verklein het gebied.",
+ "export_region_world": "Wereld (lage zoom)",
+ "export_region_europe": "Europa",
+ "export_region_north_america": "Noord-Amerika",
+ "export_region_south_america": "Zuid-Amerika",
+ "export_region_africa": "Afrika",
+ "export_region_asia": "Azië",
+ "export_region_oceania": "Oceanië",
"vector_exchange_title": "GeoJSON / KML / KMZ",
- "vector_exchange_merge": "Merge with existing drawings (uncheck to replace)",
+ "vector_exchange_merge": "Samenvoegen met bestaande tekeningen (uitschakelen om te vervangen)",
"vector_exchange_hint": "Import ondersteunt iconen uit verschillende formaten, waaronder GeoJSON en KML. Selecteer een tekening om de metadata te bekijken.",
- "vector_import_geojson": "Import GeoJSON",
- "vector_import_kml": "Import KML",
- "vector_import_kmz": "Import KMZ",
- "vector_export_geojson": "Export GeoJSON",
- "vector_export_kml": "Export KML",
- "vector_export_kmz": "Export KMZ",
- "vector_import_ok": "Imported {count} feature(s).",
- "vector_import_empty": "No features found in file.",
- "vector_import_failed": "Could not read vector file.",
- "vector_export_ok": "Export started.",
+ "vector_import_geojson": "GeoJSON importeren",
+ "vector_import_kml": "KML importeren",
+ "vector_import_kmz": "KMZ importeren",
+ "vector_export_geojson": "GeoJSON exporteren",
+ "vector_export_kml": "KML exporteren",
+ "vector_export_kmz": "KMZ exporteren",
+ "vector_import_ok": "{count} object(en) geïmporteerd.",
+ "vector_import_empty": "Geen objecten gevonden in bestand.",
+ "vector_import_failed": "Kon vectorbestand niet lezen.",
+ "vector_export_ok": "Exporteren gestart.",
"drop_geo_files": "Sleep kaartbestand hierheen",
"drop_map_files_hint": "GeoJSON, KML, KMZ of MBTiles",
"drop_no_geo_files": "Geen GeoJSON-, KML- of KMZ-bestanden gedetecteerd.",
@@ -1351,7 +1351,7 @@
"txpower": "TX-vermogen",
"spreading_factor": "SF",
"coding_rate": "Coderingspercentage",
- "bitrate": "Bitrate",
+ "bitrate": "Bitsnelheid",
"tx": "TX",
"rx": "RX",
"noise": "Geluid",
@@ -1387,7 +1387,7 @@
"stamp_cost": "Postzegelkosten{cost}",
"stamp_ticket_valid": "Uitgaand postzegelticket actief (direct verzenden). Verloopt {expires}.",
"stamp_ticket_expired": "Postzegelticket verlopen; het volgende bericht kan proof-of-work vereisen.",
- "pop_out_chat": "Pop out chat",
+ "pop_out_chat": "Chat uitklappen",
"open_in_split": "Openen in gesplitste weergave",
"select_conversation_for_pane": "Selecteer een gesprek om het hier te openen",
"more_actions": "Meer acties",
@@ -1508,11 +1508,11 @@
"failed_copy_message": "Bericht kon niet worden gekopieerd",
"failed_send_ingest": "Kon het invoerverzoek niet versturen",
"address_copied": "Uw LXMF-adres gekopieerd naar klembord",
- "map_link_share_title": "Shared map view",
- "map_link_ping_title": "Map ping",
- "map_link_open": "Open on map",
- "map_link_copy_uri": "Copy meshchatx link",
- "map_link_copied": "Map link copied",
+ "map_link_share_title": "Gedeeld kaartoverzicht",
+ "map_link_ping_title": "Kaart-ping",
+ "map_link_open": "Openen op kaart",
+ "map_link_copy_uri": "MeshChatX-link kopiëren",
+ "map_link_copied": "Kaartlink gekopieerd",
"hash_copied": "Identiteitshash gekopieerd naar klembord",
"failed_to_copy_hash": "Kopiëren van identiteitshash is mislukt",
"copy_hash": "Hash kopiëren",
@@ -1590,23 +1590,23 @@
"snr_val": "SNR:{snr}dB",
"reply": "Antwoord",
"replying_to": "Beantwoorden aan",
- "forward_banner_label": "Forwarded message",
- "forward_you_shared": "You're forwarding this quote",
- "forward_pick_recipient_title": "Forward to contact",
- "forward_message": "Forward",
- "forward_sent": "Message forwarded",
- "forward_failed": "Could not forward message",
- "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
- "forward_verify_show": "Source and verification",
- "forward_verify_hide": "Hide verification",
+ "forward_banner_label": "Doorgestuurd bericht",
+ "forward_you_shared": "U deelt dit citaat door",
+ "forward_pick_recipient_title": "Doorsturen naar contact",
+ "forward_message": "Doorsturen",
+ "forward_sent": "Bericht doorgestuurd",
+ "forward_failed": "Kon bericht niet doorsturen",
+ "forward_no_lxmf_destination": "Dit contact heeft geen bruikbaar LXMF-afleveradres.",
+ "forward_verify_show": "Bron en verificatie",
+ "forward_verify_hide": "Verificatie verbergen",
"forward_verify_explanation": "Paper LXMF-links werken alleen als het volledige bericht beschikbaar is en binnen de Paper-limieten past. Geciteerde fragmenten kunnen worden vervalst.",
- "forward_verify_loading": "Looking up verification URI…",
- "forward_verify_open_uri": "Open verification URI",
- "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
- "forward_verify_not_cached": "Original message bytes are not cached here.",
- "forward_verify_failed": "Verification lookup failed.",
- "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
- "forward_open_party_is_self": "That is your own address.",
+ "forward_verify_loading": "Verificatie-URI opzoeken…",
+ "forward_verify_open_uri": "Verificatie-URI openen",
+ "forward_verify_unavailable": "Originele berichtbytes zijn hier niet in de cache opgeslagen, dus er kon geen verificatie-URI worden gemaakt.",
+ "forward_verify_not_cached": "Originele berichtbytes zijn hier niet in de cache opgeslagen.",
+ "forward_verify_failed": "Verificatie-opzoeken mislukt.",
+ "forward_content_stub": "_Doorgestuurd via MeshChatX_\nBijlagen en geciteerde tekst zijn van de oorspronkelijke afzender.",
+ "forward_open_party_is_self": "Dat is uw eigen adres.",
"message_actions": "Berichtacties",
"save_image_to_device": "Afbeelding opslaan op apparaat",
"cancel_send": "Verzending annuleren",
@@ -1678,27 +1678,27 @@
"micron_wasm_update_toast_uploaded": "WASM geïnstalleerd vanaf uw bestand.",
"micron_wasm_update_toast_reverted": "Gebundelde Micron WASM hersteld.",
"tabs": {
- "general": "General",
- "general_desc": "Language, appearance, and platform",
- "messages": "Messages",
- "messages_desc": "LXMF, stickers, and safety",
- "network": "Network",
- "network_desc": "Transport, interfaces, and discovery",
+ "general": "Algemeen",
+ "general_desc": "Taal, uiterlijk en platform",
+ "messages": "Berichten",
+ "messages_desc": "LXMF, stickers en veiligheid",
+ "network": "Netwerk",
+ "network_desc": "Transport, interfaces en ontdekking",
"nomad": "Nomad",
- "nomad_desc": "Archiver and page rendering",
+ "nomad_desc": "Archiver en paginaweergave",
"privacy": "Privacy",
- "privacy_desc": "Data, access, and security",
- "maintenance": "Maintenance",
- "maintenance_desc": "Cleanup, export, and import",
- "plugins": "Plugins",
+ "privacy_desc": "Gegevens, toegang en beveiliging",
+ "maintenance": "Onderhoud",
+ "maintenance_desc": "Opschonen, exporteren en importeren",
+ "plugins": "Plug-ins",
"plugins_desc": "MeshChatX-plugins installeren en beheren"
},
- "failed_update_reticulum_instance": "Failed to update Reticulum instance settings!"
+ "failed_update_reticulum_instance": "Instellingen van Reticulum-instantie bijwerken mislukt!"
},
"debug": {
"title": "Debuglogs",
"description": "Applicatie- en toegangslogs, filter op ernst en doorzoeken voor probleemoplossing.",
- "tab_logs": "Logs",
+ "tab_logs": "Logboeken",
"tab_access_attempts": "Toegangspogingen",
"search_logs_placeholder": "Logboeken zoeken...",
"search_access_placeholder": "Zoek IP, pad, uitkomst...",
@@ -1791,7 +1791,7 @@
"lift_selected_confirm": "Verbanning opheffen voor {count} geselecteerde items?",
"lift_selected_success": "Verbanning opgeheven voor {count} items",
"filter_all_types": "Alle typen",
- "filter_rns": "RNS blackhole",
+ "filter_rns": "RNS-zwartgat",
"sort_newest": "Nieuwste eerst",
"sort_oldest": "Oudste eerst",
"sort_name": "Naam A-Z",
@@ -1804,7 +1804,7 @@
"pop_out_browser": "Browser uitpakken",
"new_tab": "Nieuw tabblad",
"new_tab_shortcut": "Nieuw tabblad (Ctrl+T)",
- "page_archives": "Page Archives",
+ "page_archives": "Pagina-archieven",
"archive_current_version": "Huidige versie archiveren",
"no_archives_for_this_page": "Geen archieven voor deze pagina",
"viewing_archived_version_from": "Gearchiveerde versie van{time}bekijken",
@@ -1870,10 +1870,10 @@
"multiline_hint": "Druk nogmaals op Enter om uit te breiden naar meerdere regels",
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
- "renderer_chip_plaintext": "Text",
- "renderer_hint_markdown": "Markdown renderer",
- "renderer_hint_html": "Sanitized HTML",
- "renderer_hint_plaintext": "Escaped plain text",
+ "renderer_chip_plaintext": "Tekst",
+ "renderer_hint_markdown": "Markdown-renderer",
+ "renderer_hint_html": "Gesaneerd HTML",
+ "renderer_hint_plaintext": "Escape-tekst",
"load_phase_default": "Laden pagina",
"load_phase_finding_path": "Op zoek naar een netwerkpad naar het knooppunt",
"load_phase_establishing_link": "Koppeling naar het knooppunt instellen",
@@ -1926,7 +1926,7 @@
"open_node_failed": "Kon het NomadNet-knooppunt niet openen"
},
"forwarder": {
- "title": "LXMF Forwarder",
+ "title": "LXMF-doorstuurder",
"description": "Doorsturen LXMF tussen adressen met antwoord routing behouden.",
"add_rule": "Regel voorsturen toevoegen",
"name": "Naam",
@@ -1957,22 +1957,22 @@
"showing_range": "{start}tonen naar{end}van{total}archieven",
"page_of": "Bladzijde{page}van{total_pages}",
"export_mu": "Exporteren .mu",
- "export_selected_mu": "Export .mu ({count})",
+ "export_selected_mu": ".mu exporteren ({count})",
"nodes_title": "Nodes",
- "snapshots_title": "Snapshots",
- "select_all": "Select all",
- "delete_selected": "Delete ({count})",
- "viewing_archive": "Viewing archive",
- "select_snapshot": "Select a snapshot to view",
- "open_live": "Open live",
- "search_nodes_placeholder": "Search nodes or content...",
- "no_results": "No results found",
- "no_archives": "No archives yet",
- "show_nodes": "Show nodes",
- "hide_nodes": "Hide nodes",
- "show_snapshots": "Show snapshots",
- "hide_snapshots": "Hide snapshots",
- "delete_snapshot": "Delete snapshot"
+ "snapshots_title": "Momentopnamen",
+ "select_all": "Alles selecteren",
+ "delete_selected": "Verwijderen ({count})",
+ "viewing_archive": "Archief bekijken",
+ "select_snapshot": "Selecteer een snapshot om te bekijken",
+ "open_live": "Live openen",
+ "search_nodes_placeholder": "Zoek nodes of inhoud...",
+ "no_results": "Geen resultaten gevonden",
+ "no_archives": "Nog geen archieven",
+ "show_nodes": "Nodes tonen",
+ "hide_nodes": "Nodes verbergen",
+ "show_snapshots": "Snapshots tonen",
+ "hide_snapshots": "Snapshots verbergen",
+ "delete_snapshot": "Snapshot verwijderen"
},
"docs": {
"title": "Documentatie",
@@ -2039,7 +2039,7 @@
"power_tools": "Hulpmiddelen",
"diagnostics_description": "Mesh- en Reticulumhulpprogramma's op één plek: bereikbaarheid, paden, bestandsoverdracht, vertaling, documentatie en hardwarehulpen. Open een rij voor de volledige tool.",
"back_to_tools": "Terug naar gereedschap",
- "beta_badge": "Beta",
+ "beta_badge": "Bèta",
"alpha_badge": "Alpha",
"ping": {
"title": "Ping",
@@ -2055,7 +2055,7 @@
},
"rnsh": {
"title": "RNSH",
- "description": "Manage persistent rnsh sessions"
+ "description": "Beheer permanente rnsh-sessies"
},
"rnstatus": {
"title": "RNStatus",
@@ -2132,7 +2132,7 @@
"graph_scope_contacts": "Contacten",
"graph_scope_non_contacts": "Geen contact",
"graph_match_peer": "peer",
- "graph_match_message": "msg",
+ "graph_match_message": "bericht",
"graph_match_mode_substring": "deelstr.",
"graph_match_mode_regex": "regex",
"action_label": "Dan",
@@ -2157,88 +2157,88 @@
"flow_no_rules": "Geen regels"
},
"message_blocklist": {
- "title": "Message blocklist",
- "description": "Auto-banish senders when their message or name matches a word or regex from your shared blocklist.",
- "beta_notice_title": "Beta (work in progress)",
- "beta_notice_body": "This tool is off until you turn it on. Words match regardless of case. Regex uses normal patterns. If something matches, the sender gets banished right away. Export a list to share with your group, or import one to merge or replace yours.",
- "enable_label": "Enable message blocklist",
- "enable_hint": "When disabled, entries are saved but no automatic banish runs.",
- "entries_heading": "Blocked phrases",
- "add_entry": "Add phrase",
- "empty_entries": "No phrases yet. Add entries or import a shared list.",
- "entry_enabled": "Active",
- "entry_placeholder": "spam phrase or regex pattern",
- "remove_entry": "Remove",
- "scope_label": "Applies to",
- "scope_everyone": "Everyone",
- "scope_contacts": "Contacts only",
- "scope_non_contacts": "Non-contacts only",
- "match_in_label": "Match in",
- "match_message": "Message title and body",
- "match_peer_fields": "Peer display name and contact fields",
- "match_mode_substring": "Word",
+ "title": "Berichtenblokkeerlijst",
+ "description": "Verzenders automatisch verbannen wanneer hun bericht of naam overeenkomt met een woord of regex uit je gedeelde blokkeerlijst.",
+ "beta_notice_title": "Bèta (werk in uitvoering)",
+ "beta_notice_body": "Dit hulpmiddel staat uit totdat u het inschakelt. Woorden komen overeen ongeacht hoofdlettergebruik. Regex gebruikt normale patronen. Als er iets overeenkomt, wordt de afzender meteen verbannen. Exporteer een lijst om te delen met uw groep, of importeer er een om samen te voegen of te vervangen.",
+ "enable_label": "Berichtenblokkeerlijst inschakelen",
+ "enable_hint": "Wanneer uitgeschakeld, worden items opgeslagen maar wordt er geen automatische verbanning uitgevoerd.",
+ "entries_heading": "Geblokkeerde zinnen",
+ "add_entry": "Zin toevoegen",
+ "empty_entries": "Nog geen zinnen. Voeg items toe of importeer een gedeelde lijst.",
+ "entry_enabled": "Actief",
+ "entry_placeholder": "spamzin of regexpatroon",
+ "remove_entry": "Verwijderen",
+ "scope_label": "Van toepassing op",
+ "scope_everyone": "Iedereen",
+ "scope_contacts": "Alleen contacten",
+ "scope_non_contacts": "Alleen niet-contacten",
+ "match_in_label": "Zoeken in",
+ "match_message": "Berichttitel en -inhoud",
+ "match_peer_fields": "Peerweergavenaam en contactvelden",
+ "match_mode_substring": "Woord",
"match_mode_regex": "Regex",
- "export": "Export",
- "import": "Import",
- "save": "Save",
- "saving": "Saving…",
- "revert": "Reload",
- "saved": "Blocklist saved",
- "save_failed": "Could not save blocklist",
- "load_failed": "Could not load blocklist",
- "enabled_toast": "Message blocklist enabled",
- "disabled_toast": "Message blocklist disabled",
- "exported": "Blocklist exported",
- "export_failed": "Could not export blocklist",
- "import_merge_confirm": "Merge with your current list? Choose Cancel to replace your list entirely.",
- "imported_merge": "Blocklist merged",
- "imported_replace": "Blocklist replaced",
- "import_failed": "Could not import blocklist"
+ "export": "Exporteren",
+ "import": "Importeren",
+ "save": "Opslaan",
+ "saving": "Bezig met opslaan…",
+ "revert": "Herladen",
+ "saved": "Blokkeerlijst opgeslagen",
+ "save_failed": "Kon blokkeerlijst niet opslaan",
+ "load_failed": "Kon blokkeerlijst niet laden",
+ "enabled_toast": "Berichtenblokkeerlijst ingeschakeld",
+ "disabled_toast": "Berichtenblokkeerlijst uitgeschakeld",
+ "exported": "Blokkeerlijst geëxporteerd",
+ "export_failed": "Kon blokkeerlijst niet exporteren",
+ "import_merge_confirm": "Samenvoegen met je huidige lijst? Kies Annuleren om je lijst volledig te vervangen.",
+ "imported_merge": "Blokkeerlijst samengevoegd",
+ "imported_replace": "Blokkeerlijst vervangen",
+ "import_failed": "Kon blokkeerlijst niet importeren"
},
"repository_server": {
"title": "Repositoryserver",
"description": "Distribueer MeshChatX- en Reticulum-gerelateerde Python wheels plus uw eigen bestanden opnieuw via plat HTTP zodat anderen op uw netwerk of op dit apparaat ze kunnen downloaden.",
"subtitle": "Vernieuw de meegeleverde softwarepakketten, voeg je eigen bestanden toe of start een downloadpagina voor andere apparaten.",
- "back_tools": "Back to tools",
- "http_heading": "Plain HTTP mirror",
- "host_label": "Listen address",
- "port_label": "Port",
- "start_http": "Start",
- "stop_http": "Stop",
- "restart_http": "Restart",
- "http_listen_label": "Listening:",
- "open_http": "Open in browser",
- "http_started": "HTTP server started",
- "http_stopped": "HTTP server stopped",
- "http_restarted": "HTTP server restarted",
- "http_err_generic": "HTTP server request failed",
- "http_err_invalid_host": "Invalid listen address",
- "http_err_invalid_port": "Invalid port",
- "http_err_already_running": "HTTP server is already running",
- "http_err_bind_failed": "Could not bind (port in use or permission denied)",
- "upload_heading": "Upload file",
- "choose_file": "Choose file",
- "refresh_bundled_tooltip": "Download bundled wheels to this device (needs network)",
- "refresh_started": "Downloading bundled packages…",
- "refresh_fetching": "Getting {pkg}…",
- "refresh_ok": "Bundled wheels refreshed",
- "refresh_ok_count": "{n} packages downloaded",
- "refresh_failed": "Could not refresh bundled wheels",
- "refresh_pip_missing": "pip was not found on this system. Install pip and try again.",
- "refresh_partial": "Some packages could not be downloaded (details below)",
- "refresh_partial_toast": "Bundled download finished with some failures",
- "files_heading": "Files",
- "col_name": "Name",
- "col_source": "Source",
- "col_size": "Size",
- "empty": "No files yet. Upload a file or refresh bundled wheels.",
- "delete": "Delete",
- "delete_confirm": "Delete uploaded file \"{name}\"?",
- "delete_ok": "File removed",
- "delete_failed": "Could not delete file",
- "upload_ok": "File uploaded",
- "upload_failed": "Upload failed",
- "load_failed": "Could not load repository"
+ "back_tools": "Terug naar tools",
+ "http_heading": "Platte HTTP-spiegel",
+ "host_label": "Luisteradres",
+ "port_label": "Poort",
+ "start_http": "Starten",
+ "stop_http": "Stoppen",
+ "restart_http": "Herstarten",
+ "http_listen_label": "Luistert op:",
+ "open_http": "Openen in browser",
+ "http_started": "HTTP-server gestart",
+ "http_stopped": "HTTP-server gestopt",
+ "http_restarted": "HTTP-server opnieuw gestart",
+ "http_err_generic": "HTTP-serververzoek mislukt",
+ "http_err_invalid_host": "Ongeldig luisteradres",
+ "http_err_invalid_port": "Ongeldige poort",
+ "http_err_already_running": "HTTP-server draait al",
+ "http_err_bind_failed": "Kon niet binden (poort in gebruik of geen toestemming)",
+ "upload_heading": "Bestand uploaden",
+ "choose_file": "Kies bestand",
+ "refresh_bundled_tooltip": "Gebundelde wheels naar dit apparaat downloaden (vereist netwerk)",
+ "refresh_started": "Gebundelde pakketten downloaden…",
+ "refresh_fetching": "{pkg} ophalen…",
+ "refresh_ok": "Gebundelde wheels vernieuwd",
+ "refresh_ok_count": "{n} pakketten gedownload",
+ "refresh_failed": "Kon gebundelde wheels niet vernieuwen",
+ "refresh_pip_missing": "pip is niet gevonden op dit systeem. Installeer pip en probeer opnieuw.",
+ "refresh_partial": "Sommige pakketten konden niet worden gedownload (details hieronder)",
+ "refresh_partial_toast": "Gebundelde download voltooid met enkele fouten",
+ "files_heading": "Bestanden",
+ "col_name": "Naam",
+ "col_source": "Bron",
+ "col_size": "Grootte",
+ "empty": "Nog geen bestanden. Upload een bestand of vernieuw gebundelde wheels.",
+ "delete": "Verwijderen",
+ "delete_confirm": "Geüpload bestand \"{name}\" verwijderen?",
+ "delete_ok": "Bestand verwijderd",
+ "delete_failed": "Kon bestand niet verwijderen",
+ "upload_ok": "Bestand geüpload",
+ "upload_failed": "Upload mislukt",
+ "load_failed": "Kon repository niet laden"
},
"rnode_flasher": {
"title": "RNode Flasher",
@@ -2268,7 +2268,7 @@
"common_issues": "Gemeenschappelijke vraagstukken",
"hardware_failure": "Hardwarefout:",
"provision_eeprom_hint": "Je moet de eeprom verzorgen in stap 3.",
- "firmware_corrupt": "Firmware Corrupt:",
+ "firmware_corrupt": "Firmware beschadigd:",
"set_firmware_hash_hint": "Je moet de firmware hash in stap 4 zetten.",
"step_provision": "3. Voorziening EEPROM",
"provision_description": "Stelt apparaatinformatie, controlesom en blanco handtekening in",
@@ -2289,7 +2289,7 @@
"detect_rnode": "RNode detecteren",
"reboot_rnode": "RNode opnieuw opstarten",
"read_display": "Leesweergave",
- "dump_eeprom": "Dump EEPROM",
+ "dump_eeprom": "EEPROM dumpen",
"wipe_eeprom": "EEPROM wissen",
"eeprom_console_hint": "EEPROM dumps worden getoond in dev tools console.",
"configure_bluetooth": "Bluetooth instellen (optioneel)",
@@ -2310,7 +2310,7 @@
"frequency": "Frequentie (Hz)",
"bandwidth": "Bandbreedte",
"tx_power": "Tx vermogen (dBm)",
- "spreading_factor": "Spreading Factor",
+ "spreading_factor": "Spreidingsfactor",
"coding_rate": "Coderingspercentage",
"configure_display": "Weergave instellen",
"rotation": "Rotatie",
@@ -2350,11 +2350,11 @@
"failed_start_pairing": "Paar beginnen is mislukt:{error}",
"failed_set_rotation": "Kon weergaverotatie niet instellen:{error}",
"failed_start_reconditioning": "Opnieuw opstarten van het display is mislukt:{error}",
- "no_main_bin": "Could not locate the main firmware binary in the ZIP.",
- "invalid_host": "Please enter a valid host or IP address.",
- "bluetooth_flash_unsupported": "Bluetooth cannot be used to flash firmware. Use Serial or WiFi to flash, then return to Bluetooth for management.",
- "failed_diagnostics": "Failed to run diagnostics: {error}",
- "failed_detect_with_reason": "Failed to detect RNode: {error}"
+ "no_main_bin": "Kon het hoofd firmware binary niet vinden in de ZIP.",
+ "invalid_host": "Voer een geldige host of IP-adres in.",
+ "bluetooth_flash_unsupported": "Bluetooth kan niet worden gebruikt om firmware te flashen. Gebruik Seriële of WiFi om te flashen, keer daarna terug naar Bluetooth voor beheer.",
+ "failed_diagnostics": "Diagnostiek uitvoeren mislukt: {error}",
+ "failed_detect_with_reason": "RNode detectie mislukt: {error}"
},
"alerts": {
"firmware_downloaded": "Aanbevolen firmware is gedownload en geladen.",
@@ -2375,65 +2375,65 @@
"bluetooth_pairing_started": "Paarmodus gestart (30s)",
"rotation_updated": "Rotatie bijgewerkt",
"reconditioning_started": "Opknappen gestart",
- "diagnostics_healthy": "Diagnostics: device looks healthy.",
- "diagnostics_issues": "Diagnostics: {count} issue(s) detected."
+ "diagnostics_healthy": "Diagnostiek: apparaat ziet er gezond uit.",
+ "diagnostics_issues": "Diagnostiek: {count} probleem/problemen gedetecteerd."
},
- "simple": "Simple",
- "advanced": "Advanced",
- "original": "Original",
- "open_original_tab": "Open the original flasher in a new tab",
+ "simple": "Eenvoudig",
+ "advanced": "Geavanceerd",
+ "original": "Origineel",
+ "open_original_tab": "Open de originele flasher in een nieuw tabblad",
"bluetooth": "Bluetooth",
- "preparing_firmware": "Preparing firmware...",
- "uploading": "Uploading: {percentage}%",
- "select_firmware_file": "Or select a firmware file (.zip)",
- "wifi_help": "The IP address of your RNode on the local network.",
- "run_diagnostics": "Diagnostics",
+ "preparing_firmware": "Firmware voorbereiden...",
+ "uploading": "Bezig met uploaden: {percentage}%",
+ "select_firmware_file": "Of selecteer een firmwarebestand (.zip)",
+ "wifi_help": "Het IP-adres van uw RNode op het lokale netwerk.",
+ "run_diagnostics": "Diagnostiek",
"support": {
"serial": {
- "title": "USB serial is unavailable",
- "polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
+ "title": "USB-serieel is niet beschikbaar",
+ "polyfill_not_loaded": "USB-serieel polyfill is nog niet geladen.",
"android_webview_no_serial": "Android ondersteunt Web Serial niet in deze weergave. Gebruik een desktopbrowser of de ingebouwde flasher.",
- "browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
- "android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
- "unknown": "USB serial cannot be initialised in this environment."
+ "browser_unsupported": "Deze browser ondersteunt Web Serial niet. Probeer Chrome, Edge of een andere Chromium-gebaseerde browser.",
+ "android_use_chrome": "Open deze pagina op Android in Chrome om Web Serial via WebUSB te gebruiken.",
+ "unknown": "USB-serieel kan niet worden geïnitialiseerd in deze omgeving."
},
"bluetooth": {
- "title": "Bluetooth is unavailable",
+ "title": "Bluetooth is niet beschikbaar",
"android_bridge_not_implemented": "Web Bluetooth is niet beschikbaar hier. Gebruik de Bluetooth-instellingen van het systeem of een andere browser.",
- "browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
- "insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
- "requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
- "unknown": "Bluetooth cannot be initialised in this environment."
+ "browser_unsupported": "Deze browser ondersteunt Web Bluetooth niet. Probeer Chrome of Edge.",
+ "insecure_context": "Web Bluetooth vereist een beveiligde context (HTTPS of localhost).",
+ "requires_https": "Open de flasher via HTTPS of localhost om Bluetooth in te schakelen.",
+ "unknown": "Bluetooth kan niet worden geïnitialiseerd in deze omgeving."
},
"actions": {
- "load_polyfill": "Load polyfill",
- "request_bluetooth": "Allow Bluetooth",
- "open_settings": "Open settings",
- "polyfill_loading": "Loading USB serial polyfill...",
- "bluetooth_requested": "Bluetooth permission requested."
+ "load_polyfill": "Polyfill laden",
+ "request_bluetooth": "Bluetooth toestaan",
+ "open_settings": "Instellingen openen",
+ "polyfill_loading": "USB-serieel polyfill laden...",
+ "bluetooth_requested": "Bluetooth-toestemming aangevraagd."
}
},
"diagnostics": {
- "title": "Device Diagnostics",
- "healthy": "Healthy",
- "needs_attention": "Needs attention",
- "issues_detected": "Issues detected",
+ "title": "Apparaatdiagnostiek",
+ "healthy": "Gezond",
+ "needs_attention": "Aandacht nodig",
+ "issues_detected": "Problemen gedetecteerd",
"firmware_version": "Firmware",
"platform": "Platform",
"board": "Board",
- "provisioned": "Provisioned",
+ "provisioned": "Geprovisioneerd",
"product": "Product",
"model": "Model",
"firmware_hash": "FW hash",
- "target_hash": "Target hash",
+ "target_hash": "Doel hash",
"suggestions": {
- "not_provisioned": "EEPROM is not provisioned. Run step 3 (Provision EEPROM).",
- "firmware_hash_missing": "Firmware hash is missing. Run step 4 (Set Firmware Hash).",
- "firmware_hash_mismatch": "Firmware hash mismatch. Re-flash the firmware and re-run step 4.",
- "product_mismatch": "Selected product does not match the connected device.",
- "no_firmware_version": "Could not read firmware version. Try reconnecting the device.",
- "detect_failed": "Could not detect this RNode. Verify cable, port, and power.",
- "read_timeout": "Device did not respond in time. Try reconnecting or rebooting it."
+ "not_provisioned": "EEPROM is niet geprovisioneerd. Voer stap 3 uit (EEPROM provisioneren).",
+ "firmware_hash_missing": "Firmware hash ontbreekt. Voer stap 4 uit (Firmware Hash instellen).",
+ "firmware_hash_mismatch": "Firmware hash komt niet overeen. Flash de firmware opnieuw en voer stap 4 opnieuw uit.",
+ "product_mismatch": "Geselecteerd product komt niet overeen met het aangesloten apparaat.",
+ "no_firmware_version": "Kon firmwareversie niet lezen. Probeer het apparaat opnieuw aan te sluiten.",
+ "detect_failed": "Kon deze RNode niet detecteren. Controleer kabel, poort en stroom.",
+ "read_timeout": "Apparaat reageerde niet op tijd. Probeer het opnieuw aan te sluiten of te herstarten."
}
}
},
@@ -2446,7 +2446,7 @@
"edit": "Bewerken",
"view_preview": "Voorbeeld bekijken",
"placeholder": "Voer hier uw Micron markering in...",
- "reset": "Reset",
+ "reset": "Resetten",
"new_tab": "Nieuw tabblad",
"rename_tab": "Tabblad hernoemen",
"confirm_reset": "Weet u zeker dat u de editor wilt resetten? Al uw tabbladen en inhoud zullen verloren gaan.",
@@ -2585,57 +2585,57 @@
"web_save_path_prompt": "Voer het absolute mappad in op de machine met MeshChat (server) waar het opgehaalde bestand moet worden opgeslagen:"
},
"rnsh": {
- "remote_shell": "Remote shell",
- "usage_title": "Usage",
- "usage_hint": "Create connect or listen sessions, then manage them on the Sessions tab. Output streams live while MeshChatX is running.",
- "tab_sessions": "Sessions",
- "tab_connect": "Connect",
- "tab_listen": "Listen",
- "sessions": "Sessions",
- "refresh": "Refresh",
- "name": "Session name",
- "name_placeholder": "Ops shell",
- "listen_mode": "Listen",
- "destination_hash": "Destination hash",
+ "remote_shell": "Externe shell",
+ "usage_title": "Gebruik",
+ "usage_hint": "Maak verbindings- of luistersessies aan en beheer ze op het tabblad Sessies. Uitvoerstromen blijven actief zolang MeshChatX draait.",
+ "tab_sessions": "Sessies",
+ "tab_connect": "Verbinden",
+ "tab_listen": "Luisteren",
+ "sessions": "Sessies",
+ "refresh": "Vernieuwen",
+ "name": "Sessienaam",
+ "name_placeholder": "Ops-shell",
+ "listen_mode": "Luisteren",
+ "destination_hash": "Bestemmings-hash",
"destination_placeholder": "7a55144adf826958a9529a3bcf08b149",
- "allowed_hashes": "Allowed identity hashes",
- "allowed_hashes_placeholder": "One hash per line",
- "remote_command": "Remote command",
- "default_command": "Default command",
+ "allowed_hashes": "Toegestane identiteits-hashes",
+ "allowed_hashes_placeholder": "Eén hash per regel",
+ "remote_command": "Externe opdracht",
+ "default_command": "Standaardcommando",
"command_placeholder": "/bin/bash --login",
- "mirror_exit_code": "Mirror exit code (-m)",
- "no_id": "No local identity (-N)",
- "create_and_start": "Create and start",
- "session_output": "Session output",
- "no_command_yet": "No command started yet",
- "start": "Start",
- "stop": "Stop",
- "clear": "Clear",
- "remove": "Remove",
- "send_line": "Send",
- "command_input_placeholder": "Type command input...",
- "status_running": "Running",
- "status_stopped": "Stopped",
- "status_failed": "Failed",
- "no_sessions": "No sessions created yet.",
- "unnamed_session": "Unnamed session",
- "select_or_create_session": "Select or create a session to begin.",
- "no_output_yet": "No output yet.",
- "destination_required": "Destination hash is required for connect mode.",
- "session_created": "Session created",
- "session_started": "Session started",
- "session_stopped": "Session stopped",
- "session_removed": "Session removed",
- "output_cleared": "Output cleared",
- "title": "RNSH - Reticulum Remote Shell",
- "description": "Manage persistent rnsh sessions",
- "failed_to_load_sessions": "Failed to load RNSH sessions",
- "failed_to_create_session": "Failed to create RNSH session",
- "failed_to_start_session": "Failed to start RNSH session",
- "failed_to_stop_session": "Failed to stop RNSH session",
- "failed_to_remove_session": "Failed to remove RNSH session",
- "failed_to_clear_output": "Failed to clear RNSH output",
- "failed_to_send_input": "Failed to send RNSH input",
+ "mirror_exit_code": "Afsluitcode spiegelen (-m)",
+ "no_id": "Geen lokale identiteit (-N)",
+ "create_and_start": "Aanmaken en starten",
+ "session_output": "Sessie-uitvoer",
+ "no_command_yet": "Nog geen opdracht gestart",
+ "start": "Starten",
+ "stop": "Stoppen",
+ "clear": "Wissen",
+ "remove": "Verwijderen",
+ "send_line": "Verzenden",
+ "command_input_placeholder": "Typ commando-invoer...",
+ "status_running": "Actief",
+ "status_stopped": "Gestopt",
+ "status_failed": "Mislukt",
+ "no_sessions": "Nog geen sessies aangemaakt.",
+ "unnamed_session": "Naamloze sessie",
+ "select_or_create_session": "Selecteer of maak een sessie om te beginnen.",
+ "no_output_yet": "Nog geen uitvoer.",
+ "destination_required": "Bestemmings-hash is vereist voor verbindingsmodus.",
+ "session_created": "Sessie aangemaakt",
+ "session_started": "Sessie gestart",
+ "session_stopped": "Sessie gestopt",
+ "session_removed": "Sessie verwijderd",
+ "output_cleared": "Uitvoer gewist",
+ "title": "RNSH - Reticulum Externe Shell",
+ "description": "Beheer permanente rnsh-sessies",
+ "failed_to_load_sessions": "Kan RNSH-sessies niet laden",
+ "failed_to_create_session": "Kan RNSH-sessie niet aanmaken",
+ "failed_to_start_session": "RNSH-sessie starten mislukt",
+ "failed_to_stop_session": "RNSH-sessie stoppen mislukt",
+ "failed_to_remove_session": "RNSH-sessie verwijderen mislukt",
+ "failed_to_clear_output": "Kan RNSH-uitvoer niet wissen",
+ "failed_to_send_input": "RNSH-invoer verzenden mislukt",
"listening_on": "Luistert op",
"waiting_for_address": "Wachten op listener-adres...",
"copy_address": "Kopiëren",
@@ -2644,17 +2644,17 @@
"config_dir": "Reticulum-configuratiemap",
"config_dir_placeholder": "Standaard de Reticulum-configuratie van de app",
"config_dir_hint": "Laat leeg om de Reticulum-instantie van MeshChatX te delen. Overschrijf alleen om een aparte Reticulum-configuratiemap te gebruiken.",
- "tab_sessions_short": "Sessions",
- "tab_connect_short": "Connect",
- "tab_listen_short": "Listen",
- "fullscreen": "Full screen",
- "exit_fullscreen": "Exit full screen",
- "show_sessions": "Sessions",
- "hide_sessions": "Back to terminal"
+ "tab_sessions_short": "Sessies",
+ "tab_connect_short": "Verbinden",
+ "tab_listen_short": "Luisteren",
+ "fullscreen": "Volledig scherm",
+ "exit_fullscreen": "Volledig scherm afsluiten",
+ "show_sessions": "Sessies",
+ "hide_sessions": "Terug naar terminal"
},
"rnprobe": {
"network_diagnostics": "Netwerkdiagnostiek",
- "title": "RNProbe - Destination Probe",
+ "title": "RNProbe - Bestemmingsprobe",
"description": "Stuur sondes met instelbare grootte om RTT en levering te meten.",
"destination_hash": "Bestemming Hash",
"full_destination_name": "Volledige bestemmingsnaam",
@@ -2692,7 +2692,7 @@
"include_link_stats": "Linkstatistieken opnemen",
"sort_by": "Sorteer op:",
"none": "Geen",
- "bitrate": "Bitrate",
+ "bitrate": "Bitsnelheid",
"rx_bytes": "RX-bytes",
"tx_bytes": "TX-bytes",
"total_traffic": "Totaal verkeer",
@@ -2707,7 +2707,7 @@
"noise_floor": "Geluidsvloer",
"interference": "Interferentie",
"cpu_load": "CPU-belasting",
- "cpu_temp": "CPU Temp",
+ "cpu_temp": "CPU-temperatuur",
"memory_load": "Geheugenbelasting",
"battery": "Batterij",
"network": "Netwerk",
@@ -2783,7 +2783,7 @@
"decline_call": "Oproep afbreken",
"hangup_call": "Ophangen oproep",
"mute_mic": "Demp Mic",
- "unmute_mic": "Unmute Mic",
+ "unmute_mic": "Microfoon dempen opheffen",
"mute_speaker": "Demp luidspreker",
"unmute_speaker": "Luidspreker ongedaan maken",
"telephone": "Telefoon",
@@ -2805,9 +2805,9 @@
"enter_greeting_text": "Gegroettekst invoeren...",
"greeting_text_description": "Deze tekst wordt omgezet in spraak met eSpeak NG.",
"tts_speed": "TTS-snelheid",
- "tts_pitch": "TTS Pitch",
- "tts_voice": "TTS Voice",
- "tts_word_gap": "TTS Word Gap",
+ "tts_pitch": "TTS-toonhoogte",
+ "tts_voice": "TTS-stem",
+ "tts_word_gap": "TTS-woordpauze",
"save_and_generate": "& Genereren opslaan",
"generating": "Aanmaken...",
"preview_greeting": "Voorbeeldgroet",
@@ -2824,8 +2824,8 @@
"local_tx": "Lokaal (TX)",
"download_rx": "Download RX",
"download_tx": "Download TX",
- "minimize": "Minimize",
- "active": "Active",
+ "minimize": "Minimaliseren",
+ "active": "Actief",
"default_quality": "Standaardkwaliteit",
"active_call": "Actieve oproep",
"status": "Status",
@@ -2852,7 +2852,7 @@
"ringtone_settings": "Ringtone-instellingen",
"enable_custom_ringtone": "Aangepaste ringtone inschakelen",
"enable_custom_ringtone_description": "Een aangepast audiobestand afspelen voor alle binnenkomende oproepen",
- "upload_ringtone": "Upload Ringtone",
+ "upload_ringtone": "Beltoon uploaden",
"uploading_ringtone": "Ringtone uploaden...",
"no_custom_ringtone_uploaded": "Geen aangepaste ringtone geüpload",
"supports_audio_formats": "Ondersteunt MP3, OGG, WAV, M4A, FLAC. Wordt omgezet in Opus.",
@@ -2985,7 +2985,7 @@
"voice_desc": "Voicemail, ringtones, telefoonboek en contact delen.",
"voice_desc_page": "Kristalheldere stem roept over mesh. Voicemail, aangepaste ringtones, en telefoonboek ontdekking.",
"tools": "Ingebouwde extra's",
- "tools_desc": "Micron Editor, NomadNet, RNS tools, Docs.",
+ "tools_desc": "Micron Editor, NomadNet, RNS tools, Documentatie.",
"tools_desc_page": "Micron editor, NomadNet nodes, RNS tools, en geïntegreerde documentatie.",
"archiver": "Archiver",
"archiver_desc": "Handleiding en automatische pagina archivering.",
@@ -3034,7 +3034,7 @@
"meshchatx_docs": "MeshChatX Docs",
"reticulum_docs": "Reticulum Docs",
"read_meshchatx_docs": "Lees MeshChatX Docs",
- "reticulum_manual": "Reticulum Network Manual",
+ "reticulum_manual": "Reticulum Netwerk Handleiding",
"micron_editor": "Micron-editor",
"micron_editor_desc": "Neem een kijkje op de Micron Editor voor een gids over het maken van mesh-native pagina's.",
"micron_editor_desc_page": "Leer hoe je mesh-native pagina's en interactieve inhoud te maken met behulp van de Micron markup taal.",
@@ -3099,10 +3099,10 @@
"bootstrap_added": "Toegevoegd{count}bootstrap interface(s)",
"bootstrap_pick_at_least_one": "Ten minste één bootstrap-knooppunt kiezen",
"failed_add_bootstrap": "Kon bootstrapinterface niet toevoegen",
- "failed_add_bootstrap_none": "No bootstrap interfaces were added. Check your selection and try again.",
- "failed_save_bootstrap_only": "Failed to save bootstrap-only preference",
- "failed_enable_propagation": "Failed to enable auto-propagation",
- "connect_mode_required": "Choose a connection mode to continue",
+ "failed_add_bootstrap_none": "Er zijn geen bootstrap-interfaces toegevoegd. Controleer uw selectie en probeer het opnieuw.",
+ "failed_save_bootstrap_only": "Alleen-bootstrap-voorkeur opslaan mislukt",
+ "failed_enable_propagation": "Automatische propagatie inschakelen mislukt",
+ "connect_mode_required": "Kies een verbindingsmodus om door te gaan",
"local_added": "Lokale Autointerface toegevoegd",
"failed_add_local": "Kon lokale interface niet toevoegen",
"failed_reload_rns": "Herstarten van Reticulum is mislukt",
@@ -3134,7 +3134,7 @@
"nav_paper": "Papierberichten",
"nav_paper_desc": "Gesigneerde papieren berichten (QR)",
"nav_call": "Spraakoproepen",
- "nav_call_desc": "Voice calls over the mesh",
+ "nav_call_desc": "Spraakoproepen via het mesh",
"nav_settings": "Instellingen",
"nav_settings_desc": "App- en transportvoorkeuren",
"nav_ping": "Ping",
@@ -3155,7 +3155,7 @@
"nav_forwarder_desc": "LXMF-doorstuurregels",
"nav_documentation": "Documentatie",
"nav_documentation_desc": "Offline handleidingen",
- "nav_repository_server": "Repository server",
+ "nav_repository_server": "Repository-server",
"nav_repository_server_desc": "MeshChatX-wheels, Reticulum-pakketten en uw bestanden via HTTP",
"nav_micron_editor": "Micron-editor",
"nav_micron_editor_desc": "Micron markup bewerken",
@@ -3171,7 +3171,7 @@
"action_compose_desc": "Nieuw LXMF-bericht",
"action_getting_started": "Starten",
"action_getting_started_desc": "De setup-handleiding openen",
- "action_changelog": "Changelog",
+ "action_changelog": "Wijzigingslogboek",
"action_changelog_desc": "Recente wijzigingen"
},
"relay_chat": {
@@ -3245,7 +3245,7 @@
"host_announce": "Nu aankondigen",
"host_announced": "Aangekondigd",
"host_delete": "Hub verwijderen",
- "host_clients": "clients",
+ "host_clients": "cliënten",
"host_rooms": "kamers",
"host_private": "privé",
"host_delete_room": "Kamer verwijderen",
@@ -3356,20 +3356,20 @@
"presence_connection": "{count} verbindingsgebeurtenissen"
},
"android_storage": {
- "setup_title": "Choose where MeshChatX stores data",
- "setup_desc": "File-manager storage is recommended. You can browse and back up your identity and messages under Android/data/com.meshchatx/files/. The app restarts when you change this during setup.",
- "setup_external_title": "File-manager storage (recommended)",
- "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — visible in many file managers.",
- "setup_internal_title": "Private app storage",
- "setup_internal_desc": "Hidden from file managers; only this app can access it.",
- "setup_continue": "Continue",
- "upgrade_title": "Move data to file-manager storage?",
- "upgrade_desc": "Your MeshChatX data is in private app storage. Copy it to the file-manager folder so you can browse and back up files, then restart the app.",
- "upgrade_copy": "Copy and restart",
- "upgrade_stay_internal": "Stay on private storage",
- "working": "Preparing…",
- "copy_restart_hint": "Copy scheduled. Closing the app — open MeshChatX again to finish.",
- "restart_to_apply": "Restart the app to apply your storage choice.",
- "failed": "Could not update storage location."
+ "setup_title": "Kies waar MeshChatX gegevens opslaat",
+ "setup_desc": "Bestandsbeheeropslag wordt aanbevolen. U kunt uw identiteit en berichten bekijken en back-uppen onder Android/data/com.meshchatx/files/. De app herstart wanneer u dit tijdens de installatie wijzigt.",
+ "setup_external_title": "Bestandsbeheeropslag (aanbevolen)",
+ "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — zichtbaar in veel bestandsbeheerders.",
+ "setup_internal_title": "Privé-app-opslag",
+ "setup_internal_desc": "Verborgen voor bestandsbeheerders; alleen deze app heeft er toegang toe.",
+ "setup_continue": "Doorgaan",
+ "upgrade_title": "Gegevens verplaatsen naar bestandsbeheeropslag?",
+ "upgrade_desc": "Uw MeshChatX-gegevens bevinden zich in privé-app-opslag. Kopieer ze naar de bestandsbeheermap zodat u bestanden kunt bekijken en back-uppen, en herstart vervolgens de app.",
+ "upgrade_copy": "Kopiëren en herstarten",
+ "upgrade_stay_internal": "Blijf op privéopslag",
+ "working": "Bezig met voorbereiden…",
+ "copy_restart_hint": "Kopiëren gepland. Sluit de app — open MeshChatX opnieuw om te voltooien.",
+ "restart_to_apply": "Herstart de app om uw opslagkeuze toe te passen.",
+ "failed": "Kan opslaglocatie niet bijwerken."
}
}

diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json
index 5b77c4f0..872dd165 100644
--- a/meshchatx/src/frontend/locales/ru.json
+++ b/meshchatx/src/frontend/locales/ru.json
@@ -417,41 +417,41 @@
"telemetry_trust_grant": "Доверять телеметрии",
"location_manage_desc": "Управление тем, как передается ваше местоположение.",
"restart_rns": "Перезапуск RNS",
- "flood_protection": "Flood Protection",
- "flood_protection_description": "Automatically raise the inbound stamp cost when receiving too many messages per minute from many sources. This makes coordinated spam attacks computationally expensive while keeping normal conversations affordable.",
- "flood_protection_enabled": "Enable auto-adjusting stamp cost",
- "flood_threshold": "Messages per minute threshold",
- "flood_max_stamp_cost": "Maximum stamp cost during flood",
- "flood_cooldown": "Cooldown before lowering cost (seconds)",
+ "flood_protection": "Защита от флуда",
+ "flood_protection_description": "Автоматически повышать стоимость входящего штампа при получении слишком большого количества сообщений в минуту из многих источников. Это делает координированные спам-атаки вычислительно дорогими, сохраняя обычные разговоры доступными.",
+ "flood_protection_enabled": "Включить автоматическую регулировку стоимости штампа",
+ "flood_threshold": "Порог сообщений в минуту",
+ "flood_max_stamp_cost": "Максимальная стоимость штампа при флуде",
+ "flood_cooldown": "Задержка перед снижением стоимости (секунды)",
"relay_chat": "Релейный чат",
- "desktop_tray_enabled": "System tray integration",
- "desktop_tray_enabled_description": "Keep a tray icon so MeshChatX can hide to the background instead of quitting.",
- "desktop_close_behavior": "When closing the window",
- "desktop_close_behavior_description": "Choose whether closing the window quits, hides to the tray/taskbar, or asks each time.",
- "desktop_close_behavior_ask": "Ask every time",
- "desktop_close_behavior_quit": "Quit application",
- "desktop_close_behavior_background": "Keep running in background",
- "desktop_close_behavior_background_no_tray": "Minimize to taskbar",
- "share_reticulum_instance": "Share Reticulum Instance",
- "share_reticulum_instance_description": "Make this MeshChatX Reticulum instance available to other local programs (Sideband-style shared instance). Other apps can use connectivity without Transport enabled.",
- "obfuscate_hops": "Obfuscate Hops",
- "obfuscate_hops_description": "When enabled, Reticulum applies a random local hop delta (RNS local_hops_delta) so outbound traffic does not advertise a true zero-hop origin to the wider mesh.",
- "respond_to_probes": "Respond to Probes",
- "respond_to_probes_description": "Allow this instance to answer Reticulum probe requests from the network.",
- "enable_remote_management": "Enable Remote Management",
- "enable_remote_management_description": "Allow remote management of this Reticulum instance when configured in the RNS config.",
- "shared_instance_type": "Shared Instance Type",
- "shared_instance_type_default": "Platform default",
- "shared_instance_type_description": "Use TCP when domain sockets are unavailable (common on Android). Leave default otherwise.",
- "instance_name": "Instance Name",
- "instance_name_description": "Isolate multiple shared instances on one system. Default is usually fine.",
- "rpc_config": "RPC Access",
- "rpc_config_description": "Copy these lines into another program's [reticulum] section for full shared-instance RPC access (management, interface status, path info).",
- "rpc_config_unavailable": "RPC key is not available yet. Start Reticulum as a shared instance first.",
- "rpc_config_copied": "RPC config copied to clipboard",
- "copy_rpc_config": "Copy RPC Config",
- "connected_to_shared_instance": "This MeshChatX process is attached to an external shared Reticulum instance. Edit that instance's config to change share/RPC settings.",
- "copy_failed": "Failed to copy to clipboard",
+ "desktop_tray_enabled": "Интеграция с системным треем",
+ "desktop_tray_enabled_description": "Держать значок в трее, чтобы MeshChatX мог скрываться в фон вместо завершения.",
+ "desktop_close_behavior": "При закрытии окна",
+ "desktop_close_behavior_description": "Выберите, будет ли закрытие окна завершать приложение, скрывать его в трей/панель задач или спрашивать каждый раз.",
+ "desktop_close_behavior_ask": "Спрашивать каждый раз",
+ "desktop_close_behavior_quit": "Завершить приложение",
+ "desktop_close_behavior_background": "Продолжить работу в фоне",
+ "desktop_close_behavior_background_no_tray": "Свернуть в панель задач",
+ "share_reticulum_instance": "Общий экземпляр Reticulum",
+ "share_reticulum_instance_description": "Сделайте этот экземпляр Reticulum MeshChatX доступным для других локальных программ (общий экземпляр в стиле Sideband). Другие приложения смогут использовать подключение без включенного Transport.",
+ "obfuscate_hops": "Запутывать хопы",
+ "obfuscate_hops_description": "При включении Reticulum применяет случайную локальную дельту хопа (RNS local_hops_delta), чтобы исходящий трафик не сообщал о настоящем нулевом хопе происхождения в более широкую сеть.",
+ "respond_to_probes": "Отвечать на пробы",
+ "respond_to_probes_description": "Разрешить этому экземпляру отвечать на запросы проб Reticulum из сети.",
+ "enable_remote_management": "Включить удаленное управление",
+ "enable_remote_management_description": "Разрешить удаленное управление этим экземпляром Reticulum при настройке в конфигурации RNS.",
+ "shared_instance_type": "Тип общего экземпляра",
+ "shared_instance_type_default": "По умолчанию для платформы",
+ "shared_instance_type_description": "Используйте TCP, если доменные сокеты недоступны (обычно на Android). В остальных случаях оставьте значение по умолчанию.",
+ "instance_name": "Имя экземпляра",
+ "instance_name_description": "Изолировать несколько общих экземпляров в одной системе. Обычно значение по умолчанию подходит.",
+ "rpc_config": "Доступ по RPC",
+ "rpc_config_description": "Скопируйте эти строки в раздел [reticulum] другой программы для полного доступа к общему экземпляру RPC (управление, состояние интерфейса, информация о путях).",
+ "rpc_config_unavailable": "Ключ RPC пока недоступен. Сначала запустите Reticulum как общий экземпляр.",
+ "rpc_config_copied": "Конфигурация RPC скопирована в буфер обмена",
+ "copy_rpc_config": "Копировать конфигурацию RPC",
+ "connected_to_shared_instance": "Этот процесс MeshChatX подключен к внешнему общему экземпляру Reticulum. Отредактируйте конфигурацию этого экземпляра, чтобы изменить настройки share/RPC.",
+ "copy_failed": "Не удалось скопировать в буфер обмена",
"rpc_key_hidden": "Скрыт — нажмите, чтобы показать",
"rpc_key_show": "Показать RPC-ключ",
"rpc_key_hide": "Скрыть RPC-ключ",
@@ -481,19 +481,19 @@
"search": "Поиск инструментов...",
"no_results": "Инструменты не найдены",
"error": "Ошибка",
- "continue": "Continue",
- "success": "Success",
- "warning": "Warning",
- "info": "Info",
- "copied": "Copied to clipboard",
- "failed_to_copy": "Failed to copy to clipboard",
- "save_failed": "Failed to save configuration!",
- "invalid_address": "Invalid Address",
- "loading": "Loading...",
- "ok": "OK",
- "copy": "Copy",
- "copy_to_clipboard": "Copy to clipboard",
- "clear": "Clear"
+ "continue": "Продолжить",
+ "success": "Успешно",
+ "warning": "Предупреждение",
+ "info": "Информация",
+ "copied": "Скопировано в буфер обмена",
+ "failed_to_copy": "Не удалось скопировать в буфер обмена",
+ "save_failed": "Не удалось сохранить конфигурацию!",
+ "invalid_address": "Неверный адрес",
+ "loading": "Загрузка...",
+ "ok": "ОК",
+ "copy": "Копировать",
+ "copy_to_clipboard": "Копировать в буфер обмена",
+ "clear": "Очистить"
},
"stickers": {
"settings_title": "Стикеры",
@@ -704,21 +704,21 @@
"plugins": {
"settings": {
"title": "Плагины",
- "description": "Install, enable, and review permissions for MeshChatX plugins. ZIP and WASM installs show a confirmation dialog with permissions, signature status, and security findings.",
+ "description": "Установите, включите и просмотрите разрешения для плагинов MeshChatX. Установка ZIP и WASM показывает диалог подтверждения с разрешениями, статусом подписи и результатами проверки безопасности.",
"enable": "Включить",
"disable": "Отключить",
"remove": "Удалить",
"permissions": "Разрешения",
- "install_zip": "Install plugin from ZIP or WASM bundle",
+ "install_zip": "Установить плагин из ZIP или WASM пакета",
"enabled": "Плагин включён",
"disabled": "Плагин отключён",
"removed": "Плагин удалён",
"installed": "Плагин установлен",
"auto_disabled": "Плагин автоматически отключён: {reason}",
"kill_switch": "Плагин был отключён: {reason}",
- "empty_state": "No plugins installed yet. Upload a plugin ZIP or WASM bundle to get started.",
- "drag_drop": "Drag and drop a plugin ZIP or WASM bundle here",
- "choose_file": "Choose ZIP or WASM file",
+ "empty_state": "Плагины ещё не установлены. Загрузите ZIP-архив или WASM-пакет плагина, чтобы начать.",
+ "drag_drop": "Перетащите сюда ZIP-архив или WASM-пакет плагина",
+ "choose_file": "Выберите ZIP или WASM файл",
"confirm_remove": "Удалить плагин «{name}»? Будут удалены его файлы и сохранённые данные.",
"badge_enabled": "Включён",
"badge_disabled": "Отключён",
@@ -726,97 +726,97 @@
"badge_wasm": "WASM",
"install_failed": "Не удалось установить плагин: {reason}",
"installing": "Установка плагина...",
- "badge_network": "Network",
- "network_endpoints": "Network endpoints",
- "previewing": "Reviewing plugin...",
+ "badge_network": "Сеть",
+ "network_endpoints": "Сетевые конечные точки",
+ "previewing": "Проверка плагина...",
"badge_python": "Python",
- "badge_signed": "Signed",
- "badge_trusted": "Trusted",
- "badge_invalid_signature": "Invalid signature",
- "badge_tampered": "Tampered"
+ "badge_signed": "Подписано",
+ "badge_trusted": "Доверенный",
+ "badge_invalid_signature": "Недействительная подпись",
+ "badge_tampered": "Изменено"
},
"permissions": {
- "none": "No elevated permissions",
- "hooks.announce.received": "Receive mesh announce events",
- "hooks.rns.link.event": "Receive RNS link packet and close events",
- "managers.destinationPath.read": "Read the Reticulum path table",
- "managers.rnsLink.open": "Open RNS links to destinations",
- "managers.rnsLink.identify": "Identify on RNS links",
- "managers.rnsLink.request": "Send request/response over RNS links",
- "managers.rnsLink.send": "Send packets over RNS links",
- "managers.rnsLink.close": "Close RNS links",
- "storage.isolated": "Use isolated plugin storage",
- "network.fetch": "Make outbound internet HTTP requests"
+ "none": "Нет повышенных разрешений",
+ "hooks.announce.received": "Получать события объявлений Mesh",
+ "hooks.rns.link.event": "Получать события пакетов и закрытия ссылок RNS",
+ "managers.destinationPath.read": "Читать таблицу путей Reticulum",
+ "managers.rnsLink.open": "Открывать ссылки RNS к назначениям",
+ "managers.rnsLink.identify": "Идентифицироваться на ссылках RNS",
+ "managers.rnsLink.request": "Отправлять запросы/ответы по ссылкам RNS",
+ "managers.rnsLink.send": "Отправлять пакеты по ссылкам RNS",
+ "managers.rnsLink.close": "Закрывать ссылки RNS",
+ "storage.isolated": "Использовать изолированное хранилище плагина",
+ "network.fetch": "Выполнять исходящие HTTP-запросы в интернет"
},
"install_dialog": {
- "title": "Install plugin",
- "network_title": "Install plugin with network access",
- "message": "Review permissions for \"{name}\" ({id}) before installing.",
- "permissions": "Requested permissions",
- "permissions_hint": "Uncheck any permission you do not want to grant. Denied capabilities stay unavailable at runtime.",
- "grant": "Allow",
- "network_endpoints": "External network endpoints",
- "network_endpoints_blocked": "Network access is not granted. These URLs will remain blocked.",
- "network_endpoints_unknown": "This plugin requests network access but did not declare specific endpoints.",
- "cancel": "Cancel",
- "confirm": "Install",
- "close": "Close",
- "signature": "Signature",
- "signature_unsigned": "Unsigned",
- "signature_signed": "Signed",
- "signature_trusted": "Trusted publisher",
- "signature_invalid": "Invalid signature (install blocked)",
- "trust_publisher": "Trust this publisher",
- "security_findings": "Security findings"
+ "title": "Установить плагин",
+ "network_title": "Установить плагин с сетевым доступом",
+ "message": "Проверьте разрешения для \"{name}\" ({id}) перед установкой.",
+ "permissions": "Запрашиваемые разрешения",
+ "permissions_hint": "Снимите флажки с разрешений, которые вы не хотите предоставлять. Отклонённые возможности останутся недоступными во время выполнения.",
+ "grant": "Разрешить",
+ "network_endpoints": "Внешние сетевые конечные точки",
+ "network_endpoints_blocked": "Сетевой доступ не предоставлен. Эти URL останутся заблокированными.",
+ "network_endpoints_unknown": "Этот плагин запрашивает сетевой доступ, но не указал конкретные конечные точки.",
+ "cancel": "Отмена",
+ "confirm": "Установить",
+ "close": "Закрыть",
+ "signature": "Подпись",
+ "signature_unsigned": "Без подписи",
+ "signature_signed": "Подписано",
+ "signature_trusted": "Доверенный издатель",
+ "signature_invalid": "Недействительная подпись (установка заблокирована)",
+ "trust_publisher": "Доверять этому издателю",
+ "security_findings": "Результаты проверки безопасности"
},
"sideband": {
- "title": "Sideband plugins",
- "description": "Optional Sideband-compatible Python plugins loaded from a directory. They run in-process with full host access when enabled.",
- "master_enable": "Enable Sideband plugin loader (dangerous)",
- "command_enable": "Enable Sideband command plugins",
- "path": "Plugin directory path",
- "save": "Save Sideband settings",
- "reload": "Reload Sideband plugins",
- "loaded": "Loaded Sideband plugins",
- "saved": "Sideband plugin settings saved",
- "reloaded": "Sideband plugins reloaded",
- "danger_confirm": "Sideband plugins run as full Python code inside MeshChatX with filesystem, network, and LXMF access. Enable only if you trust every script in the directory."
+ "title": "Плагины Sideband",
+ "description": "Дополнительные плагины Python, совместимые с Sideband, загружаемые из каталога. При включении они выполняются в процессе с полным доступом к хосту.",
+ "master_enable": "Включить загрузчик плагинов Sideband (опасно)",
+ "command_enable": "Включить плагины команд Sideband",
+ "path": "Путь к каталогу плагинов",
+ "save": "Сохранить настройки Sideband",
+ "reload": "Перезагрузить плагины Sideband",
+ "loaded": "Загруженные плагины Sideband",
+ "saved": "Настройки плагинов Sideband сохранены",
+ "reloaded": "Плагины Sideband перезагружены",
+ "danger_confirm": "Плагины Sideband выполняются как полноценный код Python внутри MeshChatX с доступом к файловой системе, сети и LXMF. Включайте, только если доверяете каждому скрипту в каталоге."
}
},
"selftest": {
"title": "Самодиагностика системы",
- "description": "Run diagnostic checks for the network stack, database, identity, imports, storage, LXMF, subprocess/run-module, SQLite, identity files, loopback TCP, unicode paths, RNode helpers, bot launcher argv, HTTP status/config/health/auth/bots/security/interfaces/reticulum-instance/identities/favourites/telephone/plugins/sideband/RRC APIs, plugin runtime, WebSocket, RNS Link API, and bot lifecycle.",
+ "description": "Запуск диагностических проверок для сетевого стека, базы данных, идентификации, импорта, хранилища, LXMF, подпроцесса/модуля запуска, SQLite, файлов идентификации, loopback TCP, путей Unicode, вспомогательных модулей RNode, аргументов запуска ботов, HTTP статуса/конфигурации/здоровья/аутентификации/ботов/безопасности/интерфейсов/экземпляра Reticulum/идентификаторов/избранного/телефона/плагинов/Sideband/RRC API, среды выполнения плагинов, WebSocket, RNS Link API и жизненного цикла ботов.",
"run_test_btn": "Запустить диагностику",
"running": "Выполняется диагностика...",
"stack_up": "Сетевой стек",
"config_good": "Целостность конфигурации",
"db_good": "Подключение к базе данных",
"read_write": "Чтение/запись в хранилище",
- "identity_good": "Identity Loaded",
- "imports_good": "Critical Imports",
- "storage_lock_good": "Storage Lock",
- "temp_fs_good": "Temp Filesystem",
- "public_assets_good": "Public Assets",
- "lxmf_router_good": "LXMF Router",
- "subprocess_good": "Subprocess Spawn",
- "run_module_good": "MeshChatX Run-Module",
- "sqlite_roundtrip": "SQLite Roundtrip",
- "identity_roundtrip": "Identity File Roundtrip",
- "loopback_tcp": "Loopback TCP Bind",
- "unicode_path_good": "Unicode Path I/O",
- "rnode_support_good": "RNode Support Module",
- "bot_launcher_good": "Bot Launcher Argv",
- "http_status_good": "HTTP Status",
- "http_app_info_good": "HTTP App Info",
- "http_config_good": "HTTP Config",
- "http_db_health_good": "HTTP Database Health",
- "http_auth_csrf_good": "HTTP Auth CSRF",
- "http_bots_status_good": "HTTP Bots Status",
- "http_security_good": "HTTP Server Security",
- "http_interfaces_good": "HTTP RNS Interfaces",
- "http_identities_good": "HTTP Identities",
- "http_favourites_good": "HTTP Favourites",
- "http_telephone_good": "HTTP Telephone Status",
+ "identity_good": "Идентификация загружена",
+ "imports_good": "Критические импорты",
+ "storage_lock_good": "Блокировка хранилища",
+ "temp_fs_good": "Временная файловая система",
+ "public_assets_good": "Публичные ресурсы",
+ "lxmf_router_good": "Маршрутизатор LXMF",
+ "subprocess_good": "Запуск подпроцесса",
+ "run_module_good": "Модуль запуска MeshChatX",
+ "sqlite_roundtrip": "Циклическая проверка SQLite",
+ "identity_roundtrip": "Циклическая проверка файла идентификации",
+ "loopback_tcp": "Привязка loopback TCP",
+ "unicode_path_good": "Ввод-вывод путей Unicode",
+ "rnode_support_good": "Модуль поддержки RNode",
+ "bot_launcher_good": "Аргументы запуска ботов",
+ "http_status_good": "HTTP статус",
+ "http_app_info_good": "HTTP информация о приложении",
+ "http_config_good": "HTTP конфигурация",
+ "http_db_health_good": "HTTP здоровье базы данных",
+ "http_auth_csrf_good": "HTTP аутентификация CSRF",
+ "http_bots_status_good": "HTTP статус ботов",
+ "http_security_good": "HTTP безопасность сервера",
+ "http_interfaces_good": "HTTP интерфейсы RNS",
+ "http_identities_good": "HTTP идентификаторы",
+ "http_favourites_good": "HTTP избранное",
+ "http_telephone_good": "HTTP статус телефона",
"websocket_good": "WebSocket",
"bots_lifecycle": "Бот: создать / запустить / остановить / удалить",
"passed": "Успешно",
@@ -824,16 +824,16 @@
"status_label": "Статус",
"reason_label": "Причина",
"checks_completed": "Все проверки выполнены успешно.",
- "http_reticulum_instance_good": "HTTP RNS Instance Settings",
+ "http_reticulum_instance_good": "HTTP настройки экземпляра RNS",
"expand_reason": "Показать детали ошибки",
"collapse_reason": "Скрыть детали ошибки",
- "http_plugins_good": "HTTP Plugins API",
- "http_plugins_trust_good": "HTTP Plugin Trust List",
- "http_sideband_plugins_good": "HTTP Sideband Plugins",
- "http_sideband_config_good": "HTTP Sideband Config",
- "http_rrc_hubs_good": "HTTP RRC Hubs",
- "http_rrc_servers_good": "HTTP RRC Servers",
- "plugins_runtime_good": "Plugin Manager Runtime",
+ "http_plugins_good": "HTTP API плагинов",
+ "http_plugins_trust_good": "HTTP список доверия плагинов",
+ "http_sideband_plugins_good": "HTTP плагины Sideband",
+ "http_sideband_config_good": "HTTP конфигурация Sideband",
+ "http_rrc_hubs_good": "HTTP хабы RRC",
+ "http_rrc_servers_good": "HTTP серверы RRC",
+ "plugins_runtime_good": "Среда выполнения менеджера плагинов",
"websocket_rns_link_good": "WebSocket RNS Link API"
},
"maintenance": {
@@ -909,28 +909,28 @@
"switched": "Личность успешно изменена.",
"created": "Личность успешно создана",
"deleted": "Личность удалена",
- "failed_load": "Failed to load identities",
- "enter_display_name_warning": "Please enter a display name",
- "failed_create": "Failed to create identity",
- "switch_scheduled": "Switch scheduled. Reloading application...",
- "failed_switch": "Failed to switch identity",
- "failed_delete": "Failed to delete identity",
+ "failed_load": "Не удалось загрузить идентификаторы",
+ "enter_display_name_warning": "Пожалуйста, введите отображаемое имя",
+ "failed_create": "Не удалось создать идентификатор",
+ "switch_scheduled": "Запланировано переключение. Перезагрузка приложения...",
+ "failed_switch": "Не удалось переключить идентификатор",
+ "failed_delete": "Не удалось удалить идентификатор",
"key_control": "Identity key control",
"export_key_file": "Export key file",
"copy_base32": "Copy Base32 key",
"upload_key_file": "Upload key file",
"paste_base32": "Paste Base32",
"paste_base32_placeholder": "Paste your base32 identity key here...",
- "confirm_restore": "Confirm restore",
- "restoring": "Restoring...",
+ "confirm_restore": "Подтвердить восстановление",
+ "restoring": "Восстановление...",
"identity_exported": "Identity key file exported",
"identity_copied": "Identity Base32 key copied to clipboard",
"identity_export_failed": "Failed to export identity",
"identity_copy_failed": "Failed to copy identity",
"identity_restored": "Identity imported.",
- "identity_restore_failed": "Identity restore failed",
- "no_identity_available": "No identity available",
- "message_count": "{count} messages"
+ "identity_restore_failed": "Не удалось восстановить идентификатор",
+ "no_identity_available": "Нет доступного идентификатора",
+ "message_count": "{count} сообщений"
},
"contacts": {
"title": "Контакты",
@@ -1039,27 +1039,27 @@
"integrity_backend_error": "Бинарный файл бэкенда приложения (распакованный из ASAR), по-видимому, изменился с момента последнего снимка. Если вы его не обновляли и не изменяли, проверьте изменение.",
"integrity_data_error": "Файлы идентичности или базы данных, по-видимому, изменились, пока приложение было закрыто.",
"integrity_warning_footer": "Это информационное сообщение, а не подтверждённая компрометация. Если вы обновили приложение или сами редактировали эти файлы, вы можете подтвердить, чтобы сбросить базовую линию.",
- "delete_snapshot_confirm": "Are you sure you want to delete this snapshot?",
- "snapshot_deleted": "Snapshot deleted",
- "failed_delete_snapshot": "Failed to delete snapshot",
- "delete_backup_confirm": "Are you sure you want to delete this backup?",
- "backup_deleted": "Backup deleted",
- "failed_delete_backup": "Failed to delete backup",
- "database_restored": "Database restored. Relaunching...",
- "failed_restore_snapshot": "Failed to restore snapshot",
- "restore_snapshot_confirm": "Are you sure you want to restore this snapshot? This will overwrite the current database and require an app relaunch.",
+ "delete_snapshot_confirm": "Вы уверены, что хотите удалить этот снимок?",
+ "snapshot_deleted": "Снимок удален",
+ "failed_delete_snapshot": "Не удалось удалить снимок",
+ "delete_backup_confirm": "Вы уверены, что хотите удалить эту резервную копию?",
+ "backup_deleted": "Резервная копия удалена",
+ "failed_delete_backup": "Не удалось удалить резервную копию",
+ "database_restored": "База данных восстановлена. Перезапуск...",
+ "failed_restore_snapshot": "Не удалось восстановить снимок",
+ "restore_snapshot_confirm": "Вы уверены, что хотите восстановить этот снимок? Это перезапишет текущую базу данных и потребует перезапуска приложения.",
"restore_from_file": "Восстановить из файла",
"restoring": "Восстановление...",
"restore_select_file": "Выберите файл резервной копии для восстановления.",
"restore_file_confirm": "Вы уверены, что хотите восстановить из этого файла резервной копии? Это перезапишет текущую базу данных и потребует перезапуска приложения.",
"failed_restore_file": "Не удалось восстановить из файла",
- "integrity_acknowledged": "Integrity issues acknowledged",
- "integrity_acknowledged_reset": "Integrity issues acknowledged and manifest reset",
- "integrity_acknowledge_confirm": "Are you sure you want to acknowledge these integrity issues? This will update the security manifest to match the current state of your files.",
- "failed_acknowledge_integrity": "Failed to acknowledge integrity issues",
- "shutdown_sent": "Shutdown command sent to server.",
- "identity_exported": "Identity key file exported",
- "identity_copied": "Identity Base32 key copied to clipboard",
+ "integrity_acknowledged": "Проблемы целостности подтверждены",
+ "integrity_acknowledged_reset": "Проблемы целостности подтверждены, манифест сброшен",
+ "integrity_acknowledge_confirm": "Вы уверены, что хотите подтвердить эти проблемы целостности? Это обновит манифест безопасности в соответствии с текущим состоянием ваших файлов.",
+ "failed_acknowledge_integrity": "Не удалось подтвердить проблемы целостности",
+ "shutdown_sent": "Команда завершения работы отправлена на сервер.",
+ "identity_exported": "Файл ключа идентичности экспортирован",
+ "identity_copied": "Base32-ключ идентичности скопирован в буфер обмена",
"app_name": "MeshChatX",
"automatic_backups_desc": "Автоматические ежедневные снимки вашей базы данных.",
"automatic_backups_title": "Автоматические резервные копии",
@@ -1154,15 +1154,15 @@
"restart_required": "Требуется перезапуск",
"restart_description": "Reticulum MeshChatX необходимо перезапустить, чтобы изменения вступили в силу.",
"restart_now": "Перезапустить сейчас",
- "failed_enable": "failed to enable interface",
- "failed_disable": "failed to disable interface",
- "delete_confirm": "Are you sure you want to delete this interface? This can not be undone!",
- "failed_delete": "failed to delete interface",
- "failed_export_all": "Failed to export interfaces",
- "failed_export_single": "Failed to export interface",
- "failed_reload": "Failed to reload Reticulum!",
- "interface_not_found": "The selected interface for editing could not be found.",
- "discovery_settings_saved": "Discovery settings saved",
+ "failed_enable": "не удалось включить интерфейс",
+ "failed_disable": "не удалось отключить интерфейс",
+ "delete_confirm": "Вы уверены, что хотите удалить этот интерфейс? Это действие нельзя отменить!",
+ "failed_delete": "не удалось удалить интерфейс",
+ "failed_export_all": "Не удалось экспортировать интерфейсы",
+ "failed_export_single": "Не удалось экспортировать интерфейс",
+ "failed_reload": "Не удалось перезагрузить Reticulum!",
+ "interface_not_found": "Выбранный для редактирования интерфейс не найден.",
+ "discovery_settings_saved": "Настройки обнаружения сохранены",
"discovery_list_refreshed": "Список обнаруженных интерфейсов обновлён.",
"discovery_list_refresh_failed": "Не удалось обновить список обнаруженных интерфейсов.",
"discovery_default_bootstrap_only": "По умолчанию только bootstrap для нового исходящего TCP",
@@ -1184,13 +1184,13 @@
"custom_external_docs_link": "Открыть встроенное руководство Reticulum",
"custom_external_type_required": "Укажите имя типа интерфейса Reticulum.",
"custom_external_json_invalid": "Некорректный JSON для доп. параметров.",
- "failed_save_discovery": "Failed to save discovery settings",
- "no_interfaces_found_config": "No interfaces were found in the selected configuration file",
- "failed_parse_config": "Failed to parse configuration file",
- "select_config_file": "Please select a configuration file",
- "select_at_least_one": "Please select at least one interface to import",
- "import_success": "Interfaces imported successfully. MeshChat must be restarted for these changes to take effect.",
- "failed_import_all": "Failed to import interfaces",
+ "failed_save_discovery": "Не удалось сохранить настройки обнаружения",
+ "no_interfaces_found_config": "В выбранном файле конфигурации интерфейсы не найдены",
+ "failed_parse_config": "Не удалось разобрать файл конфигурации",
+ "select_config_file": "Пожалуйста, выберите файл конфигурации",
+ "select_at_least_one": "Пожалуйста, выберите хотя бы один интерфейс для импорта",
+ "import_success": "Интерфейсы успешно импортированы. Для вступления изменений в силу необходимо перезапустить MeshChat.",
+ "failed_import_all": "Не удалось импортировать интерфейсы",
"add_interface_sidebar_a11y": "Ярлыки и пресеты сообщества",
"community_quick_start": "Быстрый старт (сообщество)",
"community_quick_start_hint": "Пресеты из онлайн-списков directory.rns.recipes.",
@@ -1205,7 +1205,7 @@
"find_more_nodes": "Найти узлы",
"quick_import": "Быстрый импорт",
"quick_import_paste_hint": "Вставьте сырую конфигурацию",
- "quick_import_placeholder": "[Interface Name]\ntype = TCPClientInterface\ntarget_host = 1.2.3.4",
+ "quick_import_placeholder": "[Имя интерфейса]\ntype = TCPClientInterface\ntarget_host = 1.2.3.4",
"quick_import_apply": "Применить: {name}",
"discovered_network_name": "Имя сети",
"discovered_passphrase": "Парольная фраза",
@@ -1319,67 +1319,67 @@
"saved_on": "Сохранено",
"settings": "Настройки карты",
"go_to_my_location": "Мое местоположение",
- "source_updated": "Map source updated",
- "failed_set_active": "Failed to set active map",
- "file_deleted": "File deleted",
- "failed_delete_file": "Failed to delete file",
- "storage_saved": "Storage directory saved",
- "failed_save_storage": "Failed to save directory",
- "export_cancelled": "Export cancelled",
- "failed_cancel_export": "Failed to cancel export",
- "failed_start_export": "Failed to start export",
- "select_mbtiles_error": "Please select an .mbtiles file",
- "view_saved": "Default view saved",
- "failed_save_view": "Failed to save default view",
- "failed_clear_cache": "Failed to clear cache",
- "failed_save_tile_server": "Failed to save tile server URL",
- "failed_save_nominatim": "Failed to save Nominatim API URL",
- "copied_coordinates": "Copied coordinates",
- "failed_load_drawings": "Failed to load drawings",
- "not_initialized": "Map not initialized",
- "drawing_saved": "Drawing saved",
- "failed_save_drawing": "Failed to save drawing",
- "deleted": "Deleted",
- "failed_delete": "Failed to delete",
- "location_not_determined": "Could not determine your location",
- "geolocation_not_supported": "Geolocation is not supported by your browser",
- "no_nodes_location": "No discovered nodes with location found",
- "failed_fetch_nodes": "Failed to fetch discovered nodes for mapping",
- "share_view": "Share map view (copy links)",
- "share_message_prefix": "MeshChatX map:",
- "share_copied": "Map links copied to clipboard",
- "ping_here": "Ping here (send in chat)",
- "ping_here_toolbar": "Ping map center in chat",
- "ping_modal_title": "Send map ping",
- "ping_destination": "Destination",
- "ping_pick_conversation": "Choose a conversation",
- "ping_send": "Send ping",
- "ping_sent": "Map ping sent",
- "ping_failed": "Could not send map ping",
- "ping_invalid_destination": "Pick a valid 32-character destination hash",
- "ping_message_prefix": "MeshChatX map ping:",
- "north_up": "North is up (map not rotated)",
- "export_tile_limit_exceeded": "Too many tiles for one export. Lower max zoom or shrink the area.",
- "export_region_world": "World (low zoom)",
- "export_region_europe": "Europe",
- "export_region_north_america": "North America",
- "export_region_south_america": "South America",
- "export_region_africa": "Africa",
- "export_region_asia": "Asia",
- "export_region_oceania": "Oceania",
+ "source_updated": "Источник карты обновлён",
+ "failed_set_active": "Не удалось установить активную карту",
+ "file_deleted": "Файл удалён",
+ "failed_delete_file": "Не удалось удалить файл",
+ "storage_saved": "Каталог хранения сохранён",
+ "failed_save_storage": "Не удалось сохранить каталог",
+ "export_cancelled": "Экспорт отменён",
+ "failed_cancel_export": "Не удалось отменить экспорт",
+ "failed_start_export": "Не удалось начать экспорт",
+ "select_mbtiles_error": "Пожалуйста, выберите файл .mbtiles",
+ "view_saved": "Вид по умолчанию сохранён",
+ "failed_save_view": "Не удалось сохранить вид по умолчанию",
+ "failed_clear_cache": "Не удалось очистить кеш",
+ "failed_save_tile_server": "Не удалось сохранить URL тайлового сервера",
+ "failed_save_nominatim": "Не удалось сохранить URL API Nominatim",
+ "copied_coordinates": "Координаты скопированы",
+ "failed_load_drawings": "Не удалось загрузить рисунки",
+ "not_initialized": "Карта не инициализирована",
+ "drawing_saved": "Рисунок сохранён",
+ "failed_save_drawing": "Не удалось сохранить рисунок",
+ "deleted": "Удалено",
+ "failed_delete": "Не удалось удалить",
+ "location_not_determined": "Не удалось определить ваше местоположение",
+ "geolocation_not_supported": "Геолокация не поддерживается вашим браузером",
+ "no_nodes_location": "Не найдено обнаруженных узлов с местоположением",
+ "failed_fetch_nodes": "Не удалось получить обнаруженные узлы для карты",
+ "share_view": "Поделиться видом карты (скопировать ссылки)",
+ "share_message_prefix": "MeshChatX карта:",
+ "share_copied": "Ссылки на карту скопированы в буфер обмена",
+ "ping_here": "Пинг сюда (отправить в чат)",
+ "ping_here_toolbar": "Отправить центр карты в чат",
+ "ping_modal_title": "Отправить пинг карты",
+ "ping_destination": "Назначение",
+ "ping_pick_conversation": "Выберите беседу",
+ "ping_send": "Отправить пинг",
+ "ping_sent": "Пинг карты отправлен",
+ "ping_failed": "Не удалось отправить пинг на карту",
+ "ping_invalid_destination": "Выберите корректный 32-символьный хеш назначения",
+ "ping_message_prefix": "MeshChatX пинг карты:",
+ "north_up": "Север сверху (карта не повёрнута)",
+ "export_tile_limit_exceeded": "Слишком много тайлов для одного экспорта. Уменьшите максимальное увеличение или область.",
+ "export_region_world": "Мир (низкое увеличение)",
+ "export_region_europe": "Европа",
+ "export_region_north_america": "Северная Америка",
+ "export_region_south_america": "Южная Америка",
+ "export_region_africa": "Африка",
+ "export_region_asia": "Азия",
+ "export_region_oceania": "Океания",
"vector_exchange_title": "GeoJSON / KML / KMZ",
- "vector_exchange_merge": "Merge with existing drawings (uncheck to replace)",
+ "vector_exchange_merge": "Объединить с существующими рисунками (снимите флажок для замены)",
"vector_exchange_hint": "Импорт поддерживает иконки из различных форматов, включая GeoJSON и KML. Выберите рисунок, чтобы увидеть его метаданные.",
- "vector_import_geojson": "Import GeoJSON",
- "vector_import_kml": "Import KML",
- "vector_import_kmz": "Import KMZ",
- "vector_export_geojson": "Export GeoJSON",
- "vector_export_kml": "Export KML",
- "vector_export_kmz": "Export KMZ",
- "vector_import_ok": "Imported {count} feature(s).",
- "vector_import_empty": "No features found in file.",
- "vector_import_failed": "Could not read vector file.",
- "vector_export_ok": "Export started.",
+ "vector_import_geojson": "Импорт GeoJSON",
+ "vector_import_kml": "Импорт KML",
+ "vector_import_kmz": "Импорт KMZ",
+ "vector_export_geojson": "Экспорт GeoJSON",
+ "vector_export_kml": "Экспорт KML",
+ "vector_export_kmz": "Экспорт KMZ",
+ "vector_import_ok": "Импортировано {count} объект(ов).",
+ "vector_import_empty": "В файле не найдено объектов.",
+ "vector_import_failed": "Не удалось прочитать векторный файл.",
+ "vector_export_ok": "Экспорт начат.",
"drop_geo_files": "Перетащите файл карты сюда",
"drop_map_files_hint": "GeoJSON, KML, KMZ или MBTiles",
"drop_no_geo_files": "Не обнаружено файлов GeoJSON, KML или KMZ.",
@@ -1530,24 +1530,24 @@
"recording": "Запись: {duration}",
"nomad_network_node": "Узел Nomad Network",
"toggle_source": "Исходный код",
- "folder_created": "Folder created",
- "failed_create_folder": "Failed to create folder",
- "folder_renamed": "Folder renamed",
- "failed_rename_folder": "Failed to rename folder",
- "folder_deleted": "Folder deleted",
- "failed_delete_folder": "Failed to delete folder",
- "moved_to_folder": "Moved to folder",
- "failed_move_folder": "Failed to move to folder",
- "marked_read": "Marked as read",
- "failed_mark_read": "Failed to mark as read",
- "conversations_deleted": "Conversations deleted",
- "failed_delete_conversations": "Failed to delete conversations",
- "failed_export_folders": "Failed to export folders",
- "folders_imported": "Folders imported",
- "failed_import_folders": "Failed to import folders",
- "failed_read_clipboard": "Failed to read from clipboard",
- "clipboard_read_requires_secure_context": "Clipboard read needs a secure page (https or http://127.0.0.1). Using http://0.0.0.0 or another non-local HTTP origin blocks the Clipboard API—open the app on 127.0.0.1 or https, or paste with Ctrl+V.",
- "clipboard_write_unavailable": "Could not copy automatically. Open on https or http://127.0.0.1, or select the text and copy manually.",
+ "folder_created": "Папка создана",
+ "failed_create_folder": "Не удалось создать папку",
+ "folder_renamed": "Папка переименована",
+ "failed_rename_folder": "Не удалось переименовать папку",
+ "folder_deleted": "Папка удалена",
+ "failed_delete_folder": "Не удалось удалить папку",
+ "moved_to_folder": "Перемещено в папку",
+ "failed_move_folder": "Не удалось переместить в папку",
+ "marked_read": "Отмечено как прочитанное",
+ "failed_mark_read": "Не удалось отметить как прочитанное",
+ "conversations_deleted": "Разговоры удалены",
+ "failed_delete_conversations": "Не удалось удалить разговоры",
+ "failed_export_folders": "Не удалось экспортировать папки",
+ "folders_imported": "Папки импортированы",
+ "failed_import_folders": "Не удалось импортировать папки",
+ "failed_read_clipboard": "Не удалось прочитать из буфера обмена",
+ "clipboard_read_requires_secure_context": "Для чтения буфера обмена требуется безопасная страница (https или http://127.0.0.1). Использование http://0.0.0.0 или другого нелокального HTTP-источника блокирует API буфера обмена — откройте приложение на 127.0.0.1 или https, либо вставьте с помощью Ctrl+V.",
+ "clipboard_write_unavailable": "Не удалось скопировать автоматически. Откройте на https или http://127.0.0.1, либо выделите текст и скопируйте вручную.",
"oversized_body_notice": "Сообщение слишком длинное для отображения здесь ({count} символов). Скопируйте полный текст, чтобы прочитать или изменить его в другом приложении.",
"oversized_body_copy": "Копировать полный текст",
"oversized_body_copied": "Полный текст сообщения скопирован",
@@ -1562,15 +1562,15 @@
"copy_message": "Копировать сообщение",
"message_copied": "Сообщение скопировано",
"failed_copy_message": "Не удалось скопировать сообщение",
- "failed_send_ingest": "Failed to send ingest request",
- "address_copied": "Your LXMF address copied to clipboard",
- "map_link_share_title": "Shared map view",
- "map_link_ping_title": "Map ping",
- "map_link_open": "Open on map",
- "map_link_copy_uri": "Copy meshchatx link",
- "map_link_copied": "Map link copied",
- "failed_copy_address": "Failed to copy address",
- "translation_failed": "Translation failed",
+ "failed_send_ingest": "Не удалось отправить запрос на обработку",
+ "address_copied": "Ваш LXMF-адрес скопирован в буфер обмена",
+ "map_link_share_title": "Общий вид карты",
+ "map_link_ping_title": "Метка на карте",
+ "map_link_open": "Открыть на карте",
+ "map_link_copy_uri": "Копировать ссылку meshchatx",
+ "map_link_copied": "Ссылка на карту скопирована",
+ "failed_copy_address": "Не удалось скопировать адрес",
+ "translation_failed": "Перевод не удался",
"translate_select_target": "Перевести на",
"translating_message": "Перевод…",
"translated_from_to": "Переведено с {source} на {target}",
@@ -1578,87 +1578,87 @@
"show_translation": "Показать перевод",
"translate_message": "Перевести сообщение",
"translate_target_invalid": "Выберите язык перевода, отличный от исходного",
- "failed_add_contact": "Failed to add contact",
- "ingesting_paper_message": "Ingesting paper message...",
- "failed_ingest_paper": "Failed to ingest paper message",
- "enter_display_name": "Enter a custom display name",
- "failed_update_display_name": "Failed to update display name",
- "failed_load_audio": "Failed to load audio attachment.",
- "no_contacts_telephone": "No contacts found in telephone",
- "failed_load_contacts": "Failed to load contacts",
- "location_request_sent": "Location request sent",
+ "failed_add_contact": "Не удалось добавить контакт",
+ "ingesting_paper_message": "Загрузка бумажного сообщения...",
+ "failed_ingest_paper": "Не удалось обработать бумажное сообщение",
+ "enter_display_name": "Введите пользовательское отображаемое имя",
+ "failed_update_display_name": "Не удалось обновить отображаемое имя",
+ "failed_load_audio": "Не удалось загрузить аудиовложение.",
+ "no_contacts_telephone": "Контакты в телефоне не найдены",
+ "failed_load_contacts": "Не удалось загрузить контакты",
+ "location_request_sent": "Запрос местоположения отправлен",
"failed_send_location_request": "Не удалось отправить запрос местоположения",
"fetching_location": "Получение местоположения...",
"location_disabled": "Передача местоположения отключена. Включите её в Настройки > Местоположение.",
"location_sent": "Местоположение успешно отправлено",
"location_requested": "Запрошено местоположение",
- "remove_image_confirm": "Are you sure you want to remove this image attachment?",
- "failed_start_recording": "failed to start recording",
- "failed_start_recording_help_mediadevices": "This web view does not expose a microphone API.",
- "failed_start_recording_help_web_audio": "Web Audio is not available in this browser.",
- "failed_start_recording_help_audio_worklet": "AudioWorklet is not supported — OPUS voice notes require it.",
- "failed_start_recording_help_permission": "Allow microphone access, or try again after another app releases the microphone.",
- "remove_audio_confirm": "Are you sure you want to remove this audio attachment?",
- "failed_generate_qr": "Failed to generate QR",
- "enter_folder_name": "Enter folder name",
- "new_folder": "New Folder",
- "rename_folder": "Rename folder",
- "failed_render_qr": "Failed to render QR code",
- "uri_copied": "URI copied to clipboard",
- "failed_copy_uri": "Failed to copy URI",
- "paper_message_sent": "Paper message sent successfully",
- "failed_send_paper": "Failed to send paper message",
- "failed_load_config": "Failed to load configuration",
- "profile_icon_saved": "Profile icon saved successfully",
- "failed_save_profile_icon": "Failed to save profile icon",
- "select_colors_warning": "Please select both background and icon colors",
- "select_icon_warning": "Please select an icon",
- "changes_reset": "Changes reset to saved values",
- "profile_icon_removed": "Profile icon removed successfully",
- "user_banished": "User banished successfully",
- "failed_banish_user": "Failed to banish user",
+ "remove_image_confirm": "Вы уверены, что хотите удалить это изображение?",
+ "failed_start_recording": "Не удалось начать запись",
+ "failed_start_recording_help_mediadevices": "Этот веб-интерфейс не предоставляет доступ к микрофону.",
+ "failed_start_recording_help_web_audio": "Web Audio недоступен в этом браузере.",
+ "failed_start_recording_help_audio_worklet": "AudioWorklet не поддерживается — для голосовых заметок OPUS требуется его поддержка.",
+ "failed_start_recording_help_permission": "Разрешите доступ к микрофону или повторите попытку после того, как другое приложение освободит микрофон.",
+ "remove_audio_confirm": "Вы уверены, что хотите удалить это аудиовложение?",
+ "failed_generate_qr": "Не удалось сгенерировать QR-код",
+ "enter_folder_name": "Введите имя папки",
+ "new_folder": "Новая папка",
+ "rename_folder": "Переименовать папку",
+ "failed_render_qr": "Не удалось отобразить QR-код",
+ "uri_copied": "URI скопирован в буфер обмена",
+ "failed_copy_uri": "Не удалось скопировать URI",
+ "paper_message_sent": "Бумажное сообщение успешно отправлено",
+ "failed_send_paper": "Не удалось отправить бумажное сообщение",
+ "failed_load_config": "Не удалось загрузить конфигурацию",
+ "profile_icon_saved": "Иконка профиля успешно сохранена",
+ "failed_save_profile_icon": "Не удалось сохранить иконку профиля",
+ "select_colors_warning": "Пожалуйста, выберите цвет фона и иконки",
+ "select_icon_warning": "Пожалуйста, выберите иконку",
+ "changes_reset": "Изменения сброшены до сохранённых значений",
+ "profile_icon_removed": "Иконка профиля успешно удалена",
+ "user_banished": "Пользователь успешно изгнан",
+ "failed_banish_user": "Не удалось изгнать пользователя",
"banish_user": "Забанить пользователя",
"banish_confirm": "Вы уверены, что хотите забанить этого пользователя? Он не сможет отправлять вам сообщения или устанавливать соединения.",
- "delete_conversation_confirm": "Are you sure you want to delete this conversation?",
- "failed_delete_conversation": "failed to delete conversation",
- "delete_history_confirm": "Are you sure you want to delete all messages in this conversation? This can not be undone!",
- "failed_delete_history": "failed to delete history",
- "pin_conversation": "Pin conversation",
- "unpin_conversation": "Unpin conversation",
- "failed_toggle_pin": "Could not update pin",
- "invalid_destination_hash": "Invalid destination hash",
- "invalid_destination_hash_format": "Invalid destination hash format",
- "ping_failed": "Ping failed. Try again later",
+ "delete_conversation_confirm": "Вы уверены, что хотите удалить этот разговор?",
+ "failed_delete_conversation": "Не удалось удалить разговор",
+ "delete_history_confirm": "Вы уверены, что хотите удалить все сообщения в этом разговоре? Это действие нельзя отменить!",
+ "failed_delete_history": "Не удалось удалить историю",
+ "pin_conversation": "Закрепить беседу",
+ "unpin_conversation": "Открепить беседу",
+ "failed_toggle_pin": "Не удалось обновить закрепление",
+ "invalid_destination_hash": "Неверный хеш назначения",
+ "invalid_destination_hash_format": "Неверный формат хеша назначения",
+ "ping_failed": "Пинг не удался. Попробуйте позже",
"ping_in_progress": "Пинг цели",
- "ping_reply_from": "Valid reply from {hash}",
- "duration": "Duration: {duration}",
- "hops_there": "Hops There: {count}",
- "hops_back": "Hops Back: {count}",
- "signal_quality": "Signal Quality: {quality}%",
- "rssi_val": "RSSI: {rssi}dBm",
- "snr_val": "SNR: {snr}dB",
- "hash_copied": "Identity hash copied to clipboard",
- "failed_to_copy_hash": "Failed to copy identity hash",
+ "ping_reply_from": "Действительный ответ от {hash}",
+ "duration": "Длительность: {duration}",
+ "hops_there": "Прыжков туда: {count}",
+ "hops_back": "Обратных прыжков: {count}",
+ "signal_quality": "Качество сигнала: {quality}%",
+ "rssi_val": "RSSI: {rssi}дБм",
+ "snr_val": "SNR: {snr}дБ",
+ "hash_copied": "Хеш идентификатора скопирован в буфер обмена",
+ "failed_to_copy_hash": "Не удалось скопировать хеш идентификатора",
"copy_hash": "Копировать хеш",
"reply": "Ответить",
"replying_to": "Ответ на",
- "forward_banner_label": "Forwarded message",
- "forward_you_shared": "You're forwarding this quote",
- "forward_pick_recipient_title": "Forward to contact",
- "forward_message": "Forward",
- "forward_sent": "Message forwarded",
- "forward_failed": "Could not forward message",
- "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
- "forward_verify_show": "Source and verification",
- "forward_verify_hide": "Hide verification",
+ "forward_banner_label": "Пересланное сообщение",
+ "forward_you_shared": "Вы пересылаете эту цитату",
+ "forward_pick_recipient_title": "Переслать контакту",
+ "forward_message": "Переслать",
+ "forward_sent": "Сообщение переслано",
+ "forward_failed": "Не удалось переслать сообщение",
+ "forward_no_lxmf_destination": "У этого контакта нет доступного адреса доставки LXMF.",
+ "forward_verify_show": "Источник и проверка",
+ "forward_verify_hide": "Скрыть проверку",
"forward_verify_explanation": "Ссылки Paper LXMF работают только если доступно полное сообщение и оно вписывается в лимиты Paper. Цитаты могут быть подделаны.",
- "forward_verify_loading": "Looking up verification URI…",
- "forward_verify_open_uri": "Open verification URI",
- "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
- "forward_verify_not_cached": "Original message bytes are not cached here.",
- "forward_verify_failed": "Verification lookup failed.",
- "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
- "forward_open_party_is_self": "That is your own address.",
+ "forward_verify_loading": "Поиск URI проверки…",
+ "forward_verify_open_uri": "Открыть URI проверки",
+ "forward_verify_unavailable": "Исходные байты сообщения не кэшированы здесь, поэтому URI проверки не может быть создан.",
+ "forward_verify_not_cached": "Исходные байты сообщения не кэшированы здесь.",
+ "forward_verify_failed": "Проверка не удалась.",
+ "forward_content_stub": "_Переслано через MeshChatX_\nВложения и цитируемый текст принадлежат исходному отправителю.",
+ "forward_open_party_is_self": "Это ваш собственный адрес.",
"message_actions": "Действия с сообщением",
"save_image_to_device": "Сохранить изображение на устройство",
"cancel_send": "Отменить отправку",
@@ -1730,15 +1730,15 @@
"archiving_page": "Архивация страницы...",
"page_archived_successfully": "Страница успешно архивирована.",
"identify_confirm": "Вы уверены, что хотите идентифицировать себя для этого узла NomadNetwork? Страница будет перезагружена после отправки вашей личности.",
- "failed_rename_favourite": "Failed to rename favourite",
- "banishment_lifted": "Banishment lifted successfully",
- "failed_lift_banishment": "Failed to lift banishment",
- "lift_banishment": "Lift Banishment",
- "enter_section_name": "Enter section name",
- "new_section": "New Section",
- "rename_section": "Rename section",
- "delete_section_confirm": "Delete this section? Favourites will move to the main section.",
- "unsupported_url": "unsupported url: ",
+ "failed_rename_favourite": "Не удалось переименовать избранное",
+ "banishment_lifted": "Изгнание успешно снято",
+ "failed_lift_banishment": "Не удалось снять изгнание",
+ "lift_banishment": "Снять изгнание",
+ "enter_section_name": "Введите название раздела",
+ "new_section": "Новый раздел",
+ "rename_section": "Переименовать раздел",
+ "delete_section_confirm": "Удалить этот раздел? Избранное переместится в основной раздел.",
+ "unsupported_url": "неподдерживаемый URL: ",
"path_away_suffix": "от вас",
"renderer_chip_micron_js": "Micron JS",
"renderer_chip_micron_wasm": "Micron WASM",
@@ -1755,10 +1755,10 @@
"multiline_hint": "Нажмите Enter ещё раз, чтобы развернуть в несколько строк",
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
- "renderer_chip_plaintext": "Text",
- "renderer_hint_markdown": "Markdown renderer",
- "renderer_hint_html": "Sanitized HTML",
- "renderer_hint_plaintext": "Escaped plain text",
+ "renderer_chip_plaintext": "Текст",
+ "renderer_hint_markdown": "Рендерер Markdown",
+ "renderer_hint_html": "Очищенный HTML",
+ "renderer_hint_plaintext": "Экранированный простой текст",
"load_phase_default": "Загрузка страницы",
"load_phase_finding_path": "Поиск сетевого пути к узлу",
"load_phase_establishing_link": "Установка соединения с узлом",
@@ -1843,21 +1843,21 @@
"page_of": "Страница {page} из {total_pages}",
"export_mu": "Экспорт .mu",
"export_selected_mu": "Экспорт .mu ({count})",
- "nodes_title": "Nodes",
- "snapshots_title": "Snapshots",
- "select_all": "Select all",
- "delete_selected": "Delete ({count})",
- "viewing_archive": "Viewing archive",
- "select_snapshot": "Select a snapshot to view",
- "open_live": "Open live",
- "search_nodes_placeholder": "Search nodes or content...",
- "no_results": "No results found",
- "no_archives": "No archives yet",
- "show_nodes": "Show nodes",
- "hide_nodes": "Hide nodes",
- "show_snapshots": "Show snapshots",
- "hide_snapshots": "Hide snapshots",
- "delete_snapshot": "Delete snapshot"
+ "nodes_title": "Узлы",
+ "snapshots_title": "Снимки",
+ "select_all": "Выбрать все",
+ "delete_selected": "Удалить ({count})",
+ "viewing_archive": "Просмотр архива",
+ "select_snapshot": "Выберите снимок для просмотра",
+ "open_live": "Открыть в реальном времени",
+ "search_nodes_placeholder": "Поиск узлов или содержимого...",
+ "no_results": "Результатов не найдено",
+ "no_archives": "Архивов пока нет",
+ "show_nodes": "Показать узлы",
+ "hide_nodes": "Скрыть узлы",
+ "show_snapshots": "Показать снимки",
+ "hide_snapshots": "Скрыть снимки",
+ "delete_snapshot": "Удалить снимок"
},
"docs": {
"title": "Документация",
@@ -1896,8 +1896,8 @@
"empty_state_hint": "Загрузите ZIP-архив с руководством Reticulum для просмотра офлайн. Поддерживается пользовательская и обновлённая документация.",
"error": "Ошибка",
"failed_upload_docs": "Не удалось загрузить документацию",
- "docs_link_copied": "Documentation link copied to clipboard",
- "failed_copy_link": "Failed to copy link",
+ "docs_link_copied": "Ссылка на документацию скопирована в буфер обмена",
+ "failed_copy_link": "Не удалось скопировать ссылку",
"load_list_failed": "Не удалось загрузить список справок. Повторите попытку позже.",
"load_doc_failed": "Не удалось загрузить эту справку.",
"search_failed": "Поиск не удался. Проверьте подключение и повторите попытку.",
@@ -1940,7 +1940,7 @@
},
"rnsh": {
"title": "RNSH",
- "description": "Manage persistent rnsh sessions"
+ "description": "Управление постоянными сессиями rnsh"
},
"rnstatus": {
"title": "RNStatus",
@@ -1949,16 +1949,16 @@
"rnpath": {
"title": "RNPath",
"description": "Просмотр путей и очередей анонсов. Запрос или сброс маршрутов.",
- "failed_fetch": "Failed to fetch path data",
- "path_dropped": "Path dropped",
- "failed_drop": "Could not drop path",
- "error_drop": "Error dropping path",
- "failed_request": "Failed to request path",
- "paths_dropped": "Paths dropped",
- "failed_drop_paths": "Failed to drop paths",
- "purge_confirm": "Purge all announce queues? This cannot be undone.",
- "queues_purged": "Announce queues purged",
- "failed_purge": "Failed to purge queues"
+ "failed_fetch": "Не удалось получить данные пути",
+ "path_dropped": "Путь удалён",
+ "failed_drop": "Не удалось удалить путь",
+ "error_drop": "Ошибка при удалении пути",
+ "failed_request": "Не удалось запросить путь",
+ "paths_dropped": "Пути удалены",
+ "failed_drop_paths": "Не удалось удалить пути",
+ "purge_confirm": "Очистить все очереди объявлений? Это действие необратимо.",
+ "queues_purged": "Очереди объявлений очищены",
+ "failed_purge": "Не удалось очистить очереди"
},
"rnpath_trace": {
"title": "RNS Трассировка пути",
@@ -1976,11 +1976,11 @@
"ping_test": "Проверить с помощью Ping"
},
"translator": {
- "title": "Translator",
+ "title": "Переводчик",
"description": "Перевод текста через сервер LibreTranslate или локальный Argos Translate."
},
"forwarder": {
- "title": "Forwarder",
+ "title": "Пересыльщик",
"description": "Пересылка LXMF между адресами с сохранением маршрута ответов."
},
"propagation_nodes": {
@@ -2042,88 +2042,88 @@
"flow_no_rules": "Нет правил"
},
"message_blocklist": {
- "title": "Message blocklist",
- "description": "Auto-banish senders when their message or name matches a word or regex from your shared blocklist.",
- "beta_notice_title": "Beta (work in progress)",
- "beta_notice_body": "This tool is off until you turn it on. Words match regardless of case. Regex uses normal patterns. If something matches, the sender gets banished right away. Export a list to share with your group, or import one to merge or replace yours.",
- "enable_label": "Enable message blocklist",
- "enable_hint": "When disabled, entries are saved but no automatic banish runs.",
- "entries_heading": "Blocked phrases",
- "add_entry": "Add phrase",
- "empty_entries": "No phrases yet. Add entries or import a shared list.",
- "entry_enabled": "Active",
- "entry_placeholder": "spam phrase or regex pattern",
- "remove_entry": "Remove",
- "scope_label": "Applies to",
- "scope_everyone": "Everyone",
- "scope_contacts": "Contacts only",
- "scope_non_contacts": "Non-contacts only",
- "match_in_label": "Match in",
- "match_message": "Message title and body",
- "match_peer_fields": "Peer display name and contact fields",
- "match_mode_substring": "Word",
+ "title": "Список блокировки сообщений",
+ "description": "Автоматически изгонять отправителей, когда их сообщение или имя совпадает со словом или regex из вашего общего списка блокировки.",
+ "beta_notice_title": "Beta (в разработке)",
+ "beta_notice_body": "Этот инструмент выключен, пока вы его не включите. Слова сопоставляются независимо от регистра. Regex использует обычные шаблоны. Если есть совпадение, отправитель немедленно изгоняется. Экспортируйте список, чтобы поделиться с группой, или импортируйте, чтобы объединить или заменить свой.",
+ "enable_label": "Включить список блокировки сообщений",
+ "enable_hint": "Когда отключено, записи сохраняются, но автоматическое изгнание не выполняется.",
+ "entries_heading": "Заблокированные фразы",
+ "add_entry": "Добавить фразу",
+ "empty_entries": "Пока нет фраз. Добавьте записи или импортируйте общий список.",
+ "entry_enabled": "Активно",
+ "entry_placeholder": "спам-фраза или regex-шаблон",
+ "remove_entry": "Удалить",
+ "scope_label": "Применяется к",
+ "scope_everyone": "Все",
+ "scope_contacts": "Только контакты",
+ "scope_non_contacts": "Только не контакты",
+ "match_in_label": "Искать в",
+ "match_message": "Заголовок и текст сообщения",
+ "match_peer_fields": "Отображаемое имя пира и поля контакта",
+ "match_mode_substring": "Слово",
"match_mode_regex": "Regex",
- "export": "Export",
- "import": "Import",
- "save": "Save",
- "saving": "Saving…",
- "revert": "Reload",
- "saved": "Blocklist saved",
- "save_failed": "Could not save blocklist",
- "load_failed": "Could not load blocklist",
- "enabled_toast": "Message blocklist enabled",
- "disabled_toast": "Message blocklist disabled",
- "exported": "Blocklist exported",
- "export_failed": "Could not export blocklist",
- "import_merge_confirm": "Merge with your current list? Choose Cancel to replace your list entirely.",
- "imported_merge": "Blocklist merged",
- "imported_replace": "Blocklist replaced",
- "import_failed": "Could not import blocklist"
+ "export": "Экспорт",
+ "import": "Импорт",
+ "save": "Сохранить",
+ "saving": "Сохранение…",
+ "revert": "Перезагрузить",
+ "saved": "Список блокировки сохранён",
+ "save_failed": "Не удалось сохранить список блокировки",
+ "load_failed": "Не удалось загрузить список блокировки",
+ "enabled_toast": "Список блокировки сообщений включён",
+ "disabled_toast": "Список блокировки сообщений отключён",
+ "exported": "Список блокировки экспортирован",
+ "export_failed": "Не удалось экспортировать список блокировки",
+ "import_merge_confirm": "Объединить с текущим списком? Выберите «Отмена», чтобы полностью заменить список.",
+ "imported_merge": "Список блокировки объединён",
+ "imported_replace": "Список блокировки заменён",
+ "import_failed": "Не удалось импортировать список блокировки"
},
"repository_server": {
"title": "Сервер репозитория",
"description": "Повторно распространяйте Python-колёса MeshChatX и экосистемы Reticulum плюс свои файлы по обычному HTTP, чтобы другие в сети или на этом устройстве могли их скачать.",
"subtitle": "Обновите встроенные пакеты ПО, добавьте свои файлы или запустите страницу загрузки для других устройств.",
- "back_tools": "Back to tools",
- "http_heading": "Plain HTTP mirror",
- "host_label": "Listen address",
- "port_label": "Port",
- "start_http": "Start",
- "stop_http": "Stop",
- "restart_http": "Restart",
- "http_listen_label": "Listening:",
- "open_http": "Open in browser",
- "http_started": "HTTP server started",
- "http_stopped": "HTTP server stopped",
- "http_restarted": "HTTP server restarted",
- "http_err_generic": "HTTP server request failed",
- "http_err_invalid_host": "Invalid listen address",
- "http_err_invalid_port": "Invalid port",
- "http_err_already_running": "HTTP server is already running",
- "http_err_bind_failed": "Could not bind (port in use or permission denied)",
- "upload_heading": "Upload file",
- "choose_file": "Choose file",
- "refresh_bundled_tooltip": "Download bundled wheels to this device (needs network)",
- "refresh_started": "Downloading bundled packages…",
- "refresh_fetching": "Getting {pkg}…",
- "refresh_ok": "Bundled wheels refreshed",
- "refresh_ok_count": "{n} packages downloaded",
- "refresh_failed": "Could not refresh bundled wheels",
- "refresh_pip_missing": "pip was not found on this system. Install pip and try again.",
- "refresh_partial": "Some packages could not be downloaded (details below)",
- "refresh_partial_toast": "Bundled download finished with some failures",
- "files_heading": "Files",
- "col_name": "Name",
- "col_source": "Source",
- "col_size": "Size",
- "empty": "No files yet. Upload a file or refresh bundled wheels.",
- "delete": "Delete",
- "delete_confirm": "Delete uploaded file \"{name}\"?",
- "delete_ok": "File removed",
- "delete_failed": "Could not delete file",
- "upload_ok": "File uploaded",
- "upload_failed": "Upload failed",
- "load_failed": "Could not load repository"
+ "back_tools": "Назад к инструментам",
+ "http_heading": "Обычное HTTP-зеркало",
+ "host_label": "Адрес прослушивания",
+ "port_label": "Порт",
+ "start_http": "Запустить",
+ "stop_http": "Остановить",
+ "restart_http": "Перезапустить",
+ "http_listen_label": "Прослушивание:",
+ "open_http": "Открыть в браузере",
+ "http_started": "HTTP-сервер запущен",
+ "http_stopped": "HTTP-сервер остановлен",
+ "http_restarted": "HTTP-сервер перезапущен",
+ "http_err_generic": "Ошибка запроса к HTTP-серверу",
+ "http_err_invalid_host": "Недопустимый адрес прослушивания",
+ "http_err_invalid_port": "Недопустимый порт",
+ "http_err_already_running": "HTTP-сервер уже запущен",
+ "http_err_bind_failed": "Не удалось привязаться (порт занят или отказано в разрешении)",
+ "upload_heading": "Загрузить файл",
+ "choose_file": "Выберите файл",
+ "refresh_bundled_tooltip": "Загрузить встроенные колеса на это устройство (требуется сеть)",
+ "refresh_started": "Загрузка встроенных пакетов…",
+ "refresh_fetching": "Получение {pkg}…",
+ "refresh_ok": "Встроенные колеса обновлены",
+ "refresh_ok_count": "Загружено пакетов: {n}",
+ "refresh_failed": "Не удалось обновить встроенные колеса",
+ "refresh_pip_missing": "pip не найден в этой системе. Установите pip и повторите попытку.",
+ "refresh_partial": "Некоторые пакеты не удалось загрузить (подробности ниже)",
+ "refresh_partial_toast": "Встроенная загрузка завершена с некоторыми ошибками",
+ "files_heading": "Файлы",
+ "col_name": "Имя",
+ "col_source": "Источник",
+ "col_size": "Размер",
+ "empty": "Пока нет файлов. Загрузите файл или обновите встроенные пакеты.",
+ "delete": "Удалить",
+ "delete_confirm": "Удалить загруженный файл \"{name}\"?",
+ "delete_ok": "Файл удалён",
+ "delete_failed": "Не удалось удалить файл",
+ "upload_ok": "Файл загружен",
+ "upload_failed": "Ошибка загрузки",
+ "load_failed": "Не удалось загрузить репозиторий"
},
"rnode_flasher": {
"title": "RNode Flasher",
@@ -2235,11 +2235,11 @@
"failed_start_pairing": "Не удалось начать сопряжение: {error}",
"failed_set_rotation": "Не удалось установить поворот дисплея: {error}",
"failed_start_reconditioning": "Не удалось запустить восстановление дисплея: {error}",
- "no_main_bin": "Could not locate the main firmware binary in the ZIP.",
- "invalid_host": "Please enter a valid host or IP address.",
- "bluetooth_flash_unsupported": "Bluetooth cannot be used to flash firmware. Use Serial or WiFi to flash, then return to Bluetooth for management.",
- "failed_diagnostics": "Failed to run diagnostics: {error}",
- "failed_detect_with_reason": "Failed to detect RNode: {error}"
+ "no_main_bin": "Не удалось найти основной бинарный файл прошивки в ZIP.",
+ "invalid_host": "Пожалуйста, введите действительный хост или IP-адрес.",
+ "bluetooth_flash_unsupported": "Bluetooth нельзя использовать для прошивки. Используйте последовательный порт или WiFi для прошивки, затем вернитесь к Bluetooth для управления.",
+ "failed_diagnostics": "Не удалось выполнить диагностику: {error}",
+ "failed_detect_with_reason": "Не удалось обнаружить RNode: {error}"
},
"alerts": {
"firmware_downloaded": "Рекомендуемая прошивка была скачана и загружена.",
@@ -2260,65 +2260,65 @@
"bluetooth_pairing_started": "Режим сопряжения запущен (30с)",
"rotation_updated": "Поворот обновлен",
"reconditioning_started": "Восстановление запущено",
- "diagnostics_healthy": "Diagnostics: device looks healthy.",
- "diagnostics_issues": "Diagnostics: {count} issue(s) detected."
+ "diagnostics_healthy": "Диагностика: устройство выглядит исправным.",
+ "diagnostics_issues": "Диагностика: обнаружено {count} проблем(ы)."
},
- "simple": "Simple",
- "advanced": "Advanced",
- "original": "Original",
- "open_original_tab": "Open the original flasher in a new tab",
+ "simple": "Простой",
+ "advanced": "Расширенные",
+ "original": "Оригинальный",
+ "open_original_tab": "Открыть оригинальный прошивальщик в новой вкладке",
"bluetooth": "Bluetooth",
- "preparing_firmware": "Preparing firmware...",
- "uploading": "Uploading: {percentage}%",
- "select_firmware_file": "Or select a firmware file (.zip)",
- "wifi_help": "The IP address of your RNode on the local network.",
- "run_diagnostics": "Diagnostics",
+ "preparing_firmware": "Подготовка прошивки...",
+ "uploading": "Загрузка: {percentage}%",
+ "select_firmware_file": "Или выберите файл прошивки (.zip)",
+ "wifi_help": "IP-адрес вашего RNode в локальной сети.",
+ "run_diagnostics": "Диагностика",
"support": {
"serial": {
- "title": "USB serial is unavailable",
- "polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
+ "title": "USB-последовательный порт недоступен",
+ "polyfill_not_loaded": "Полифилл USB-последовательного порта еще не загружен.",
"android_webview_no_serial": "Android не поддерживает Web Serial в этом режиме. Используйте браузер на ПК или встроенный прошивальщик.",
- "browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
- "android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
- "unknown": "USB serial cannot be initialised in this environment."
+ "browser_unsupported": "Этот браузер не поддерживает Web Serial. Попробуйте Chrome, Edge или другой браузер на основе Chromium.",
+ "android_use_chrome": "На Android откройте эту страницу в Chrome, чтобы использовать Web Serial через WebUSB.",
+ "unknown": "USB-последовательный порт не может быть инициализирован в этом окружении."
},
"bluetooth": {
- "title": "Bluetooth is unavailable",
+ "title": "Bluetooth недоступен",
"android_bridge_not_implemented": "Web Bluetooth здесь недоступен. Используйте настройки Bluetooth в ОС или другой браузер.",
- "browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
- "insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
- "requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
- "unknown": "Bluetooth cannot be initialised in this environment."
+ "browser_unsupported": "Этот браузер не поддерживает Web Bluetooth. Попробуйте Chrome или Edge.",
+ "insecure_context": "Web Bluetooth требует безопасного контекста (HTTPS или localhost).",
+ "requires_https": "Откройте прошивальщик через HTTPS или localhost, чтобы включить Bluetooth.",
+ "unknown": "Bluetooth не может быть инициализирован в этом окружении."
},
"actions": {
- "load_polyfill": "Load polyfill",
- "request_bluetooth": "Allow Bluetooth",
- "open_settings": "Open settings",
- "polyfill_loading": "Loading USB serial polyfill...",
- "bluetooth_requested": "Bluetooth permission requested."
+ "load_polyfill": "Загрузить полифилл",
+ "request_bluetooth": "Разрешить Bluetooth",
+ "open_settings": "Открыть настройки",
+ "polyfill_loading": "Загрузка полифилла USB-последовательного порта...",
+ "bluetooth_requested": "Запрошено разрешение Bluetooth."
}
},
"diagnostics": {
- "title": "Device Diagnostics",
- "healthy": "Healthy",
- "needs_attention": "Needs attention",
- "issues_detected": "Issues detected",
- "firmware_version": "Firmware",
- "platform": "Platform",
- "board": "Board",
- "provisioned": "Provisioned",
- "product": "Product",
- "model": "Model",
- "firmware_hash": "FW hash",
- "target_hash": "Target hash",
+ "title": "Диагностика устройства",
+ "healthy": "Исправно",
+ "needs_attention": "Требует внимания",
+ "issues_detected": "Обнаружены проблемы",
+ "firmware_version": "Прошивка",
+ "platform": "Платформа",
+ "board": "Плата",
+ "provisioned": "Подготовлен",
+ "product": "Продукт",
+ "model": "Модель",
+ "firmware_hash": "Хэш прошивки",
+ "target_hash": "Целевой хеш",
"suggestions": {
- "not_provisioned": "EEPROM is not provisioned. Run step 3 (Provision EEPROM).",
- "firmware_hash_missing": "Firmware hash is missing. Run step 4 (Set Firmware Hash).",
- "firmware_hash_mismatch": "Firmware hash mismatch. Re-flash the firmware and re-run step 4.",
- "product_mismatch": "Selected product does not match the connected device.",
- "no_firmware_version": "Could not read firmware version. Try reconnecting the device.",
- "detect_failed": "Could not detect this RNode. Verify cable, port, and power.",
- "read_timeout": "Device did not respond in time. Try reconnecting or rebooting it."
+ "not_provisioned": "EEPROM не подготовлен. Выполните шаг 3 (Подготовка EEPROM).",
+ "firmware_hash_missing": "Отсутствует хеш прошивки. Выполните шаг 4 (Установить хеш прошивки).",
+ "firmware_hash_mismatch": "Несовпадение хеша прошивки. Перепрошейте прошивку и повторите шаг 4.",
+ "product_mismatch": "Выбранный продукт не соответствует подключенному устройству.",
+ "no_firmware_version": "Не удалось прочитать версию прошивки. Попробуйте переподключить устройство.",
+ "detect_failed": "Не удалось обнаружить этот RNode. Проверьте кабель, порт и питание.",
+ "read_timeout": "Устройство не ответило вовремя. Попробуйте переподключить или перезагрузить его."
}
}
},
@@ -2382,7 +2382,7 @@
"description": "Создание или чтение бумажных сообщений LXMF через QR."
},
"mesh_server": {
- "title": "Mesh Server",
+ "title": "Mesh-сервер",
"description": "Публикация страниц Micron и файлов для узлов в mesh."
},
"rns_tunnel": {
@@ -2470,57 +2470,57 @@
"web_save_path_prompt": "Введите абсолютный путь к папке на машине с MeshChat (сервер), куда сохранить полученный файл:"
},
"rnsh": {
- "remote_shell": "Remote shell",
- "usage_title": "Usage",
- "usage_hint": "Create connect or listen sessions, then manage them on the Sessions tab. Output streams live while MeshChatX is running.",
- "tab_sessions": "Sessions",
- "tab_connect": "Connect",
- "tab_listen": "Listen",
- "sessions": "Sessions",
- "refresh": "Refresh",
- "name": "Session name",
- "name_placeholder": "Ops shell",
- "listen_mode": "Listen",
- "destination_hash": "Destination hash",
+ "remote_shell": "Удалённая оболочка",
+ "usage_title": "Использование",
+ "usage_hint": "Создавайте сеансы подключения или прослушивания, затем управляйте ими на вкладке «Сеансы». Потоки вывода активны, пока работает MeshChatX.",
+ "tab_sessions": "Сеансы",
+ "tab_connect": "Подключение",
+ "tab_listen": "Прослушивание",
+ "sessions": "Сеансы",
+ "refresh": "Обновить",
+ "name": "Имя сеанса",
+ "name_placeholder": "Оболочка оператора",
+ "listen_mode": "Прослушивание",
+ "destination_hash": "Хеш назначения",
"destination_placeholder": "7a55144adf826958a9529a3bcf08b149",
- "allowed_hashes": "Allowed identity hashes",
- "allowed_hashes_placeholder": "One hash per line",
- "remote_command": "Remote command",
- "default_command": "Default command",
+ "allowed_hashes": "Разрешённые хеши идентификаторов",
+ "allowed_hashes_placeholder": "Один хеш на строку",
+ "remote_command": "Удалённая команда",
+ "default_command": "Команда по умолчанию",
"command_placeholder": "/bin/bash --login",
- "mirror_exit_code": "Mirror exit code (-m)",
- "no_id": "No local identity (-N)",
- "create_and_start": "Create and start",
- "session_output": "Session output",
- "no_command_yet": "No command started yet",
- "start": "Start",
- "stop": "Stop",
- "clear": "Clear",
- "remove": "Remove",
- "send_line": "Send",
- "command_input_placeholder": "Type command input...",
- "status_running": "Running",
- "status_stopped": "Stopped",
- "status_failed": "Failed",
- "no_sessions": "No sessions created yet.",
- "unnamed_session": "Unnamed session",
- "select_or_create_session": "Select or create a session to begin.",
- "no_output_yet": "No output yet.",
- "destination_required": "Destination hash is required for connect mode.",
- "session_created": "Session created",
- "session_started": "Session started",
- "session_stopped": "Session stopped",
- "session_removed": "Session removed",
- "output_cleared": "Output cleared",
- "title": "RNSH - Reticulum Remote Shell",
- "description": "Manage persistent rnsh sessions",
- "failed_to_load_sessions": "Failed to load RNSH sessions",
- "failed_to_create_session": "Failed to create RNSH session",
- "failed_to_start_session": "Failed to start RNSH session",
- "failed_to_stop_session": "Failed to stop RNSH session",
- "failed_to_remove_session": "Failed to remove RNSH session",
- "failed_to_clear_output": "Failed to clear RNSH output",
- "failed_to_send_input": "Failed to send RNSH input",
+ "mirror_exit_code": "Зеркалировать код выхода (-m)",
+ "no_id": "Нет локальной идентификации (-N)",
+ "create_and_start": "Создать и запустить",
+ "session_output": "Вывод сеанса",
+ "no_command_yet": "Команда ещё не запущена",
+ "start": "Запустить",
+ "stop": "Остановить",
+ "clear": "Очистить",
+ "remove": "Удалить",
+ "send_line": "Отправить",
+ "command_input_placeholder": "Введите команду...",
+ "status_running": "Выполняется",
+ "status_stopped": "Остановлен",
+ "status_failed": "Ошибка",
+ "no_sessions": "Сеансы ещё не созданы.",
+ "unnamed_session": "Безымянный сеанс",
+ "select_or_create_session": "Выберите или создайте сеанс для начала.",
+ "no_output_yet": "Вывода пока нет.",
+ "destination_required": "Для режима подключения требуется хеш назначения.",
+ "session_created": "Сеанс создан",
+ "session_started": "Сеанс запущен",
+ "session_stopped": "Сеанс остановлен",
+ "session_removed": "Сеанс удалён",
+ "output_cleared": "Вывод очищен",
+ "title": "RNSH - Удалённая оболочка Reticulum",
+ "description": "Управление постоянными сессиями rnsh",
+ "failed_to_load_sessions": "Не удалось загрузить сессии RNSH",
+ "failed_to_create_session": "Не удалось создать сессию RNSH",
+ "failed_to_start_session": "Не удалось запустить сеанс RNSH",
+ "failed_to_stop_session": "Не удалось остановить сеанс RNSH",
+ "failed_to_remove_session": "Не удалось удалить сессию RNSH",
+ "failed_to_clear_output": "Не удалось очистить вывод RNSH",
+ "failed_to_send_input": "Не удалось отправить ввод RNSH",
"listening_on": "Слушает на",
"waiting_for_address": "Ожидание адреса слушателя...",
"copy_address": "Копировать",
@@ -2529,13 +2529,13 @@
"config_dir": "Каталог конфигурации Reticulum",
"config_dir_placeholder": "По умолчанию используется конфигурация Reticulum приложения",
"config_dir_hint": "Оставьте пустым, чтобы использовать экземпляр Reticulum MeshChatX. Переопределяйте только для использования отдельного каталога конфигурации Reticulum.",
- "tab_sessions_short": "Sessions",
- "tab_connect_short": "Connect",
- "tab_listen_short": "Listen",
- "fullscreen": "Full screen",
- "exit_fullscreen": "Exit full screen",
- "show_sessions": "Sessions",
- "hide_sessions": "Back to terminal"
+ "tab_sessions_short": "Сеансы",
+ "tab_connect_short": "Подкл.",
+ "tab_listen_short": "Просл.",
+ "fullscreen": "Полный экран",
+ "exit_fullscreen": "Выйти из полноэкранного режима",
+ "show_sessions": "Сеансы",
+ "hide_sessions": "Назад к терминалу"
},
"rnprobe": {
"network_diagnostics": "Диагностика сети",
@@ -2638,10 +2638,10 @@
"languages_loaded_from": "Языки загружаются из LibreTranslate API или пакетов Argos Translate.",
"refresh_languages": "Обновить языки",
"copied_to_clipboard": "Скопировано в буфер обмена",
- "failed_load_languages": "Failed to load languages. Make sure LibreTranslate is running or Argos Translate is installed.",
- "failed_translate": "Translation failed. Make sure LibreTranslate is running or Argos Translate is installed.",
- "select_languages_warning": "Please select both source and target languages.",
- "auto_detect_not_supported": "Auto-detection is not supported with Argos Translate. Please select a source language."
+ "failed_load_languages": "Не удалось загрузить языки. Убедитесь, что LibreTranslate запущен или Argos Translate установлен.",
+ "failed_translate": "Перевод не удался. Убедитесь, что LibreTranslate запущен или Argos Translate установлен.",
+ "select_languages_warning": "Пожалуйста, выберите исходный и целевой языки.",
+ "auto_detect_not_supported": "Автоопределение не поддерживается в Argos Translate. Пожалуйста, выберите исходный язык."
},
"call": {
"phone": "Телефон",
@@ -2709,8 +2709,8 @@
"local_tx": "Локальный (TX)",
"download_rx": "Скачать RX",
"download_tx": "Скачать TX",
- "minimize": "Minimize",
- "active": "Active",
+ "minimize": "Свернуть",
+ "active": "Активен",
"default_quality": "Качество по умолчанию",
"active_call": "Активный звонок",
"status": "Статус",
@@ -2765,37 +2765,37 @@
"failed_to_update_ringtone_name": "Не удалось обновить название рингтона",
"failed_to_play_ringtone": "Не удалось воспроизвести рингтон",
"failed_to_play_voicemail": "Не удалось воспроизвести сообщение",
- "web_audio_not_available": "Web audio not available",
+ "web_audio_not_available": "Веб-аудио недоступно",
"no_audio_input_found": "Входное аудиоустройство не найдено. Проверьте микрофон и разрешения.",
"microphone_permission_denied": "Разрешение на использование микрофона отклонено. Разрешите доступ и попробуйте снова.",
- "failed_to_update_dnd": "Failed to update Do Not Disturb status",
- "failed_to_update_call_settings": "Failed to update call settings",
- "failed_to_update_recording_status": "Failed to update call recording status",
- "call_history_cleared": "Call history cleared",
- "failed_to_clear_call_history": "Failed to clear call history",
- "identity_banished": "Identity banished",
- "failed_to_banish_identity": "Failed to banish identity",
- "name_and_hash_required": "Name and identity hash required",
- "contact_updated": "Contact updated",
- "contact_added": "Contact added",
- "contact_deleted": "Contact deleted",
- "failed_to_delete_contact": "Failed to delete contact",
- "hash_copied": "Hash copied to clipboard",
- "failed_to_copy_hash": "Failed to copy hash",
- "greeting_uploaded_successfully": "Greeting uploaded successfully",
- "greeting_deleted": "Greeting deleted",
- "failed_to_delete_greeting": "Failed to delete greeting",
- "failed_to_start_recording_greeting": "Failed to start recording greeting",
- "greeting_recorded_from_mic": "Greeting recorded from mic",
- "failed_to_stop_recording_greeting": "Failed to stop recording greeting",
- "failed_to_load_recording": "Failed to load recording audio",
- "recording_deleted": "Recording deleted",
- "failed_to_delete_recording": "Failed to delete recording",
- "call_sent_to_voicemail": "Call sent to voicemail",
- "failed_to_send_to_voicemail": "Failed to send call to voicemail",
- "failed_load_audio_edit": "Failed to load audio for editing",
- "ringtone_saved": "Ringtone saved successfully",
- "failed_save_ringtone": "Failed to save edited ringtone"
+ "failed_to_update_dnd": "Не удалось обновить статус «Не беспокоить»",
+ "failed_to_update_call_settings": "Не удалось обновить настройки вызова",
+ "failed_to_update_recording_status": "Не удалось обновить статус записи вызова",
+ "call_history_cleared": "История вызовов очищена",
+ "failed_to_clear_call_history": "Не удалось очистить историю вызовов",
+ "identity_banished": "Идентификатор забанен",
+ "failed_to_banish_identity": "Не удалось забанить идентификатор",
+ "name_and_hash_required": "Требуется имя и хеш идентификатора",
+ "contact_updated": "Контакт обновлён",
+ "contact_added": "Контакт добавлен",
+ "contact_deleted": "Контакт удалён",
+ "failed_to_delete_contact": "Не удалось удалить контакт",
+ "hash_copied": "Хеш скопирован в буфер обмена",
+ "failed_to_copy_hash": "Не удалось скопировать хеш",
+ "greeting_uploaded_successfully": "Приветствие успешно загружено",
+ "greeting_deleted": "Приветствие удалено",
+ "failed_to_delete_greeting": "Не удалось удалить приветствие",
+ "failed_to_start_recording_greeting": "Не удалось начать запись приветствия",
+ "greeting_recorded_from_mic": "Приветствие записано с микрофона",
+ "failed_to_stop_recording_greeting": "Не удалось остановить запись приветствия",
+ "failed_to_load_recording": "Не удалось загрузить аудиозапись",
+ "recording_deleted": "Запись удалена",
+ "failed_to_delete_recording": "Не удалось удалить запись",
+ "call_sent_to_voicemail": "Вызов отправлен на голосовую почту",
+ "failed_to_send_to_voicemail": "Не удалось отправить вызов на голосовую почту",
+ "failed_load_audio_edit": "Не удалось загрузить аудио для редактирования",
+ "ringtone_saved": "Рингтон успешно сохранён",
+ "failed_save_ringtone": "Не удалось сохранить отредактированный рингтон"
},
"tutorial": {
"title": "Начало работы",
@@ -2932,10 +2932,10 @@
"bootstrap_added": "Добавлено интерфейсов: {count}",
"bootstrap_pick_at_least_one": "Выберите хотя бы один начальный узел",
"failed_add_bootstrap": "Не удалось добавить начальный интерфейс",
- "failed_add_bootstrap_none": "No bootstrap interfaces were added. Check your selection and try again.",
- "failed_save_bootstrap_only": "Failed to save bootstrap-only preference",
- "failed_enable_propagation": "Failed to enable auto-propagation",
- "connect_mode_required": "Choose a connection mode to continue",
+ "failed_add_bootstrap_none": "Не добавлено ни одного bootstrap-интерфейса. Проверьте выбор и попробуйте снова.",
+ "failed_save_bootstrap_only": "Не удалось сохранить настройку только bootstrap",
+ "failed_enable_propagation": "Не удалось включить автоматическое распространение",
+ "connect_mode_required": "Выберите режим подключения, чтобы продолжить",
"local_added": "Локальный AutoInterface добавлен",
"failed_add_local": "Не удалось добавить локальный интерфейс",
"failed_reload_rns": "Не удалось перезапустить Reticulum",
@@ -2988,7 +2988,7 @@
"nav_forwarder_desc": "Правила пересылки LXMF",
"nav_documentation": "Документация",
"nav_documentation_desc": "Офлайн-руководства",
- "nav_repository_server": "Repository server",
+ "nav_repository_server": "Сервер репозитория",
"nav_repository_server_desc": "Колёса MeshChatX, пакеты Reticulum и ваши файлы по HTTP",
"nav_micron_editor": "Редактор Micron",
"nav_micron_editor_desc": "Редактировать разметку Micron",
@@ -3008,16 +3008,16 @@
"action_changelog_desc": "Последние изменения"
},
"settings": {
- "shortcut_saved": "Shortcut saved",
- "shortcut_deleted": "Shortcut deleted",
- "archived_pages_flushed": "Archived pages flushed.",
- "failed_enable_transport": "Failed to enable transport mode!",
- "failed_disable_transport": "Failed to disable transport mode!",
- "failed_reload_reticulum": "Failed to reload Reticulum!",
- "folders_exported": "Folders exported",
- "failed_export_folders": "Failed to export folders",
- "folders_imported": "Folders and mappings imported successfully",
- "failed_import_folders": "Failed to import folders",
+ "shortcut_saved": "Ярлык сохранён",
+ "shortcut_deleted": "Ярлык удалён",
+ "archived_pages_flushed": "Архивные страницы очищены.",
+ "failed_enable_transport": "Не удалось включить режим транспорта!",
+ "failed_disable_transport": "Не удалось отключить транспортный режим!",
+ "failed_reload_reticulum": "Не удалось перезагрузить Reticulum!",
+ "folders_exported": "Папки экспортированы",
+ "failed_export_folders": "Не удалось экспортировать папки",
+ "folders_imported": "Папки и сопоставления успешно импортированы",
+ "failed_import_folders": "Не удалось импортировать папки",
"share_apk_heading": "Поделиться этой установкой",
"share_apk_desc": "Отправьте установленный пакет MeshChatX по Bluetooth, Nearby Share или другому приложению. Только в Android-приложении.",
"share_apk_short_hint": "Открывает системное меню для отправки этого APK.",
@@ -3055,22 +3055,22 @@
"micron_wasm_update_toast_uploaded": "WASM установлен из вашего файла.",
"micron_wasm_update_toast_reverted": "Восстановлен встроенный Micron WASM.",
"tabs": {
- "general": "General",
- "general_desc": "Language, appearance, and platform",
- "messages": "Messages",
- "messages_desc": "LXMF, stickers, and safety",
- "network": "Network",
- "network_desc": "Transport, interfaces, and discovery",
+ "general": "Общие",
+ "general_desc": "Язык, внешний вид и платформа",
+ "messages": "Сообщения",
+ "messages_desc": "LXMF, стикеры и безопасность",
+ "network": "Сеть",
+ "network_desc": "Транспорт, интерфейсы и обнаружение",
"nomad": "Nomad",
- "nomad_desc": "Archiver and page rendering",
- "privacy": "Privacy",
- "privacy_desc": "Data, access, and security",
- "maintenance": "Maintenance",
- "maintenance_desc": "Cleanup, export, and import",
+ "nomad_desc": "Архиватор и рендеринг страниц",
+ "privacy": "Конфиденциальность",
+ "privacy_desc": "Данные, доступ и безопасность",
+ "maintenance": "Обслуживание",
+ "maintenance_desc": "Очистка, экспорт и импорт",
"plugins": "Плагины",
"plugins_desc": "Установка и управление плагинами MeshChatX"
},
- "failed_update_reticulum_instance": "Failed to update Reticulum instance settings!"
+ "failed_update_reticulum_instance": "Не удалось обновить настройки экземпляра Reticulum!"
},
"debug": {
"title": "Журнал отладки",
@@ -3094,85 +3094,85 @@
"failed_copy_access": "Не удалось скопировать попытки доступа"
},
"visualiser": {
- "title": "Network Visualiser",
+ "title": "Визуализатор сети",
"description": "Граф обнаруженных узлов и связей.",
"reticulum_mesh": "Reticulum Mesh",
- "network_visualizer": "Network Visualizer",
- "node_info": "Node Info",
- "hash": "Hash",
- "hops": "Hops",
- "interface": "Interface",
+ "network_visualizer": "Визуализатор сети",
+ "node_info": "Информация об узле",
+ "hash": "Хеш",
+ "hops": "Хопы",
+ "interface": "Интерфейс",
"rssi": "RSSI",
"snr": "SNR",
- "first_seen": "First seen",
- "last_seen": "Last seen",
- "center_node": "Center on node",
- "copy_hash": "Copy Hash",
- "banish_identity": "Banish identity",
- "banished_identities": "Banished identities",
- "filter_nodes": "Filter nodes...",
- "all": "All",
- "direct": "Direct",
- "one_hop": "1 Hop",
- "multi_hops": "2+ Hops",
- "clear": "Clear",
- "show_labels": "Show all labels",
- "show_edges": "Show edges",
- "show_tooltips": "Show tooltips",
- "show_rssi": "Show RSSI",
- "show_snr": "Show SNR",
- "show_hops": "Show Hops",
- "physics": "Physics",
- "gravity": "Gravity",
- "spring_length": "Spring length",
- "spring_strength": "Spring strength",
- "damping": "Damping",
- "central_gravity": "Central gravity",
- "edge_strength": "Edge strength",
+ "first_seen": "Впервые замечен",
+ "last_seen": "Последний раз замечен",
+ "center_node": "Центрировать на узле",
+ "copy_hash": "Копировать хеш",
+ "banish_identity": "Изгнать идентификатор",
+ "banished_identities": "Изгнанные идентификаторы",
+ "filter_nodes": "Фильтр узлов...",
+ "all": "Все",
+ "direct": "Прямой",
+ "one_hop": "1 хоп",
+ "multi_hops": "2+ хопа",
+ "clear": "Очистить",
+ "show_labels": "Показать все метки",
+ "show_edges": "Показать ребра",
+ "show_tooltips": "Показать подсказки",
+ "show_rssi": "Показать RSSI",
+ "show_snr": "Показать SNR",
+ "show_hops": "Показать хопы",
+ "physics": "Физика",
+ "gravity": "Гравитация",
+ "spring_length": "Длина пружины",
+ "spring_strength": "Сила пружины",
+ "damping": "Демпфирование",
+ "central_gravity": "Центральная гравитация",
+ "edge_strength": "Сила ребер",
"force_atlas_2": "Force Atlas 2",
"barns_hut": "Barns Hut",
- "repulsion": "Repulsion",
- "reset_physics": "Reset physics",
- "reset_camera": "Reset Camera",
- "clear_graph": "Clear graph",
- "total_nodes": "Total nodes",
- "total_edges": "Total edges",
- "discovered": "Discovered",
- "wait_between_batches": "Wait between batches",
- "batch": "Batch",
- "loading_status": "Loading status",
- "failed_load": "Failed to load network data",
+ "repulsion": "Отталкивание",
+ "reset_physics": "Сбросить физику",
+ "reset_camera": "Сбросить камеру",
+ "clear_graph": "Очистить граф",
+ "total_nodes": "Всего узлов",
+ "total_edges": "Всего ребер",
+ "discovered": "Обнаружено",
+ "wait_between_batches": "Ожидание между пакетами",
+ "batch": "Пакет",
+ "loading_status": "Статус загрузки",
+ "failed_load": "Не удалось загрузить данные сети",
"max_hops_filter": "Макс. хопов",
"show_disabled_interfaces": "Показать отключенные интерфейсы",
"show_discovered_interfaces": "Показать обнаруженные интерфейсы"
},
"banishment": {
- "title": "Banished",
+ "title": "Забаненные",
"description": "Просмотр и снятие блокировок с идентичностей и узлов.",
- "failed_load_banished": "Failed to load banished destinations",
- "search_placeholder": "Search by hash or display name...",
- "loading_items": "Loading banished items...",
- "no_items": "No banished items found",
- "lift_banishment": "Lift Banishment",
- "lift_banishment_confirm": "Are you sure you want to lift the banishment for {name}?",
- "banished_at": "Banished at",
- "banished_until": "Banished until",
- "reason": "Reason",
- "type": "Type",
- "user": "User",
- "node": "Node",
+ "failed_load_banished": "Не удалось загрузить забаненные адресаты",
+ "search_placeholder": "Поиск по хешу или отображаемому имени...",
+ "loading_items": "Загрузка забаненных элементов...",
+ "no_items": "Забаненных элементов не найдено",
+ "lift_banishment": "Снять бан",
+ "lift_banishment_confirm": "Вы уверены, что хотите снять бан для {name}?",
+ "banished_at": "Забанен в",
+ "banished_until": "Забанен до",
+ "reason": "Причина",
+ "type": "Тип",
+ "user": "Пользователь",
+ "node": "Узел",
"blocked_destinations": "Заблокированные направления",
- "banishment_lifted": "Banishment lifted successfully",
- "failed_lift_banishment": "Failed to lift banishment",
- "lift_selected": "Lift banishment ({count})",
- "lift_selected_confirm": "Lift banishment for {count} selected items?",
- "lift_selected_success": "Lifted banishment for {count} items",
- "filter_all_types": "All types",
- "filter_rns": "RNS blackhole",
- "sort_newest": "Newest first",
- "sort_oldest": "Oldest first",
- "sort_name": "Name A-Z",
- "result_count": "{count} items"
+ "banishment_lifted": "Бан успешно снят",
+ "failed_lift_banishment": "Не удалось снять бан",
+ "lift_selected": "Снять бан ({count})",
+ "lift_selected_confirm": "Снять бан для {count} выбранных элементов?",
+ "lift_selected_success": "Бан снят для {count} элементов",
+ "filter_all_types": "Все типы",
+ "filter_rns": "Черная дыра RNS",
+ "sort_newest": "Сначала новые",
+ "sort_oldest": "Сначала старые",
+ "sort_name": "Имя А-Я",
+ "result_count": "{count} элементов"
},
"relay_chat": {
"title": "Релейный чат",
@@ -3356,20 +3356,20 @@
"presence_connection": "{count} событий соединения"
},
"android_storage": {
- "setup_title": "Choose where MeshChatX stores data",
- "setup_desc": "File-manager storage is recommended. You can browse and back up your identity and messages under Android/data/com.meshchatx/files/. The app restarts when you change this during setup.",
- "setup_external_title": "File-manager storage (recommended)",
- "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — visible in many file managers.",
- "setup_internal_title": "Private app storage",
- "setup_internal_desc": "Hidden from file managers; only this app can access it.",
- "setup_continue": "Continue",
- "upgrade_title": "Move data to file-manager storage?",
- "upgrade_desc": "Your MeshChatX data is in private app storage. Copy it to the file-manager folder so you can browse and back up files, then restart the app.",
- "upgrade_copy": "Copy and restart",
- "upgrade_stay_internal": "Stay on private storage",
- "working": "Preparing…",
- "copy_restart_hint": "Copy scheduled. Closing the app — open MeshChatX again to finish.",
- "restart_to_apply": "Restart the app to apply your storage choice.",
- "failed": "Could not update storage location."
+ "setup_title": "Выберите, где MeshChatX хранит данные",
+ "setup_desc": "Рекомендуется хранилище файлового менеджера. Вы можете просматривать и создавать резервные копии своей идентичности и сообщений в Android/data/com.meshchatx/files/. Приложение перезапускается при изменении этого параметра во время настройки.",
+ "setup_external_title": "Хранилище файлового менеджера (рекомендуется)",
+ "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — видно во многих файловых менеджерах.",
+ "setup_internal_title": "Приватное хранилище приложения",
+ "setup_internal_desc": "Скрыто от файловых менеджеров; только это приложение может получить к нему доступ.",
+ "setup_continue": "Продолжить",
+ "upgrade_title": "Переместить данные в хранилище файлового менеджера?",
+ "upgrade_desc": "Ваши данные MeshChatX находятся в приватном хранилище приложения. Скопируйте их в папку файлового менеджера, чтобы просматривать и создавать резервные копии файлов, затем перезапустите приложение.",
+ "upgrade_copy": "Копировать и перезапустить",
+ "upgrade_stay_internal": "Остаться в приватном хранилище",
+ "working": "Подготовка…",
+ "copy_restart_hint": "Копирование запланировано. Закройте приложение — откройте MeshChatX снова, чтобы завершить.",
+ "restart_to_apply": "Перезапустите приложение, чтобы применить выбор хранилища.",
+ "failed": "Не удалось обновить расположение хранилища."
}
}

diff --git a/meshchatx/src/frontend/locales/zh.json b/meshchatx/src/frontend/locales/zh.json
index cc8d6831..96df16be 100644
--- a/meshchatx/src/frontend/locales/zh.json
+++ b/meshchatx/src/frontend/locales/zh.json
@@ -1,7 +1,7 @@
{
"_languageName": "中文",
"bots": {
- "title": "LXMFy Bots",
+ "title": "LXMFy 机器人",
"description": "安装 LXMFy 后,可使用简单的 LXMF 机器人(echo、notes、reminders)。",
"bot_framework": "机器人框架",
"lxmfy_not_detected": "未检测到 LXMFy",
@@ -417,41 +417,41 @@
"telemetry_trust_grant": "授予遥测信任",
"location_manage_desc": "管理您的位置共享方式。",
"restart_rns": "重启 RNS",
- "flood_protection": "Flood Protection",
- "flood_protection_description": "Automatically raise the inbound stamp cost when receiving too many messages per minute from many sources. This makes coordinated spam attacks computationally expensive while keeping normal conversations affordable.",
- "flood_protection_enabled": "Enable auto-adjusting stamp cost",
- "flood_threshold": "Messages per minute threshold",
- "flood_max_stamp_cost": "Maximum stamp cost during flood",
- "flood_cooldown": "Cooldown before lowering cost (seconds)",
+ "flood_protection": "洪水保护",
+ "flood_protection_description": "当从多个来源每分钟收到过多消息时,自动提高入站邮票费用。这使得协调的垃圾邮件攻击在计算上成本高昂,同时保持正常对话的可负担性。",
+ "flood_protection_enabled": "启用自动调整邮票费用",
+ "flood_threshold": "每分钟消息阈值",
+ "flood_max_stamp_cost": "洪水期间的最大邮票费用",
+ "flood_cooldown": "降低费用前的冷却时间(秒)",
"relay_chat": "中继聊天",
- "desktop_tray_enabled": "System tray integration",
- "desktop_tray_enabled_description": "Keep a tray icon so MeshChatX can hide to the background instead of quitting.",
- "desktop_close_behavior": "When closing the window",
- "desktop_close_behavior_description": "Choose whether closing the window quits, hides to the tray/taskbar, or asks each time.",
- "desktop_close_behavior_ask": "Ask every time",
- "desktop_close_behavior_quit": "Quit application",
- "desktop_close_behavior_background": "Keep running in background",
- "desktop_close_behavior_background_no_tray": "Minimize to taskbar",
- "share_reticulum_instance": "Share Reticulum Instance",
- "share_reticulum_instance_description": "Make this MeshChatX Reticulum instance available to other local programs (Sideband-style shared instance). Other apps can use connectivity without Transport enabled.",
- "obfuscate_hops": "Obfuscate Hops",
- "obfuscate_hops_description": "When enabled, Reticulum applies a random local hop delta (RNS local_hops_delta) so outbound traffic does not advertise a true zero-hop origin to the wider mesh.",
- "respond_to_probes": "Respond to Probes",
- "respond_to_probes_description": "Allow this instance to answer Reticulum probe requests from the network.",
- "enable_remote_management": "Enable Remote Management",
- "enable_remote_management_description": "Allow remote management of this Reticulum instance when configured in the RNS config.",
- "shared_instance_type": "Shared Instance Type",
- "shared_instance_type_default": "Platform default",
- "shared_instance_type_description": "Use TCP when domain sockets are unavailable (common on Android). Leave default otherwise.",
- "instance_name": "Instance Name",
- "instance_name_description": "Isolate multiple shared instances on one system. Default is usually fine.",
- "rpc_config": "RPC Access",
- "rpc_config_description": "Copy these lines into another program's [reticulum] section for full shared-instance RPC access (management, interface status, path info).",
- "rpc_config_unavailable": "RPC key is not available yet. Start Reticulum as a shared instance first.",
- "rpc_config_copied": "RPC config copied to clipboard",
- "copy_rpc_config": "Copy RPC Config",
- "connected_to_shared_instance": "This MeshChatX process is attached to an external shared Reticulum instance. Edit that instance's config to change share/RPC settings.",
- "copy_failed": "Failed to copy to clipboard",
+ "desktop_tray_enabled": "系统托盘集成",
+ "desktop_tray_enabled_description": "保留托盘图标,以便MeshChatX可以隐藏到后台而不是退出。",
+ "desktop_close_behavior": "关闭窗口时",
+ "desktop_close_behavior_description": "选择关闭窗口是退出、隐藏到系统托盘/任务栏,还是每次都询问。",
+ "desktop_close_behavior_ask": "每次都询问",
+ "desktop_close_behavior_quit": "退出应用",
+ "desktop_close_behavior_background": "在后台继续运行",
+ "desktop_close_behavior_background_no_tray": "最小化到任务栏",
+ "share_reticulum_instance": "共享Reticulum实例",
+ "share_reticulum_instance_description": "将此MeshChatX Reticulum实例提供给其他本地程序使用(Sideband风格的共享实例)。其他应用无需启用Transport即可使用连接。",
+ "obfuscate_hops": "混淆跳数",
+ "obfuscate_hops_description": "启用后,Reticulum应用随机本地跳数增量(RNS local_hops_delta),使传出流量不会向更广的网格通告真实的零跳起点。",
+ "respond_to_probes": "响应探测",
+ "respond_to_probes_description": "允许此实例响应来自网络的Reticulum探测请求。",
+ "enable_remote_management": "启用远程管理",
+ "enable_remote_management_description": "允许在RNS配置中对此Reticulum实例进行远程管理。",
+ "shared_instance_type": "共享实例类型",
+ "shared_instance_type_default": "平台默认",
+ "shared_instance_type_description": "当域套接字不可用时使用TCP(常见于Android)。否则保留默认值。",
+ "instance_name": "实例名称",
+ "instance_name_description": "隔离同一系统上的多个共享实例。通常默认值即可。",
+ "rpc_config": "RPC访问",
+ "rpc_config_description": "将这些行复制到另一个程序的[reticulum]部分,以获得完整的共享实例RPC访问权限(管理、接口状态、路径信息)。",
+ "rpc_config_unavailable": "RPC密钥尚不可用。请先以共享实例方式启动Reticulum。",
+ "rpc_config_copied": "RPC配置已复制到剪贴板",
+ "copy_rpc_config": "复制RPC配置",
+ "connected_to_shared_instance": "此MeshChatX进程已附加到外部共享的Reticulum实例。编辑该实例的配置以更改共享/RPC设置。",
+ "copy_failed": "复制到剪贴板失败",
"rpc_key_hidden": "已隐藏 — 点按显示",
"rpc_key_show": "显示 RPC 密钥",
"rpc_key_hide": "隐藏 RPC 密钥",
@@ -493,7 +493,7 @@
"invalid_address": "无效的地址",
"loading": "正在加载...",
"ok": "确定",
- "clear": "Clear"
+ "clear": "清除"
},
"stickers": {
"settings_title": "贴纸",
@@ -596,7 +596,7 @@
"format_png": "PNG",
"format_webp": "WebP",
"quality": "质量",
- "emoji": "Emoji",
+ "emoji": "表情符号",
"emoji_placeholder": "可选",
"pack": "包",
"no_pack": "无包",
@@ -704,21 +704,21 @@
"plugins": {
"settings": {
"title": "插件",
- "description": "Install, enable, and review permissions for MeshChatX plugins. ZIP and WASM installs show a confirmation dialog with permissions, signature status, and security findings.",
+ "description": "安装、启用和审查MeshChatX插件的权限。ZIP和WASM安装会显示包含权限、签名状态和安全发现的确认对话框。",
"enable": "启用",
"disable": "禁用",
"remove": "移除",
"permissions": "权限",
- "install_zip": "Install plugin from ZIP or WASM bundle",
+ "install_zip": "从ZIP或WASM包安装插件",
"enabled": "插件已启用",
"disabled": "插件已禁用",
"removed": "插件已移除",
"installed": "插件已安装",
"auto_disabled": "插件已自动禁用:{reason}",
"kill_switch": "插件已被禁用:{reason}",
- "empty_state": "No plugins installed yet. Upload a plugin ZIP or WASM bundle to get started.",
- "drag_drop": "Drag and drop a plugin ZIP or WASM bundle here",
- "choose_file": "Choose ZIP or WASM file",
+ "empty_state": "尚未安装任何插件。上传插件ZIP或WASM包以开始使用。",
+ "drag_drop": "将插件ZIP或WASM包拖放到此处",
+ "choose_file": "选择ZIP或WASM文件",
"confirm_remove": "移除插件“{name}”?将删除其文件和存储数据。",
"badge_enabled": "已启用",
"badge_disabled": "已禁用",
@@ -726,97 +726,97 @@
"badge_wasm": "WASM",
"install_failed": "插件安装失败:{reason}",
"installing": "正在安装插件...",
- "badge_network": "Network",
- "network_endpoints": "Network endpoints",
- "previewing": "Reviewing plugin...",
+ "badge_network": "网络",
+ "network_endpoints": "网络端点",
+ "previewing": "正在审查插件...",
"badge_python": "Python",
- "badge_signed": "Signed",
- "badge_trusted": "Trusted",
- "badge_invalid_signature": "Invalid signature",
- "badge_tampered": "Tampered"
+ "badge_signed": "已签名",
+ "badge_trusted": "受信任",
+ "badge_invalid_signature": "无效签名",
+ "badge_tampered": "被篡改"
},
"permissions": {
- "none": "No elevated permissions",
- "hooks.announce.received": "Receive mesh announce events",
- "hooks.rns.link.event": "Receive RNS link packet and close events",
- "managers.destinationPath.read": "Read the Reticulum path table",
- "managers.rnsLink.open": "Open RNS links to destinations",
- "managers.rnsLink.identify": "Identify on RNS links",
- "managers.rnsLink.request": "Send request/response over RNS links",
- "managers.rnsLink.send": "Send packets over RNS links",
- "managers.rnsLink.close": "Close RNS links",
- "storage.isolated": "Use isolated plugin storage",
- "network.fetch": "Make outbound internet HTTP requests"
+ "none": "无提升权限",
+ "hooks.announce.received": "接收 Mesh 公告事件",
+ "hooks.rns.link.event": "接收 RNS 链路数据包和关闭事件",
+ "managers.destinationPath.read": "读取 Reticulum 路径表",
+ "managers.rnsLink.open": "打开到目的地的RNS链接",
+ "managers.rnsLink.identify": "在RNS链路上识别",
+ "managers.rnsLink.request": "通过RNS链路发送请求/响应",
+ "managers.rnsLink.send": "通过RNS链路发送数据包",
+ "managers.rnsLink.close": "关闭 RNS 链路",
+ "storage.isolated": "使用隔离的插件存储",
+ "network.fetch": "发起出站互联网HTTP请求"
},
"install_dialog": {
- "title": "Install plugin",
- "network_title": "Install plugin with network access",
- "message": "Review permissions for \"{name}\" ({id}) before installing.",
- "permissions": "Requested permissions",
- "permissions_hint": "Uncheck any permission you do not want to grant. Denied capabilities stay unavailable at runtime.",
- "grant": "Allow",
- "network_endpoints": "External network endpoints",
- "network_endpoints_blocked": "Network access is not granted. These URLs will remain blocked.",
- "network_endpoints_unknown": "This plugin requests network access but did not declare specific endpoints.",
- "cancel": "Cancel",
- "confirm": "Install",
- "close": "Close",
- "signature": "Signature",
- "signature_unsigned": "Unsigned",
- "signature_signed": "Signed",
- "signature_trusted": "Trusted publisher",
- "signature_invalid": "Invalid signature (install blocked)",
- "trust_publisher": "Trust this publisher",
- "security_findings": "Security findings"
+ "title": "安装插件",
+ "network_title": "安装具有网络访问权限的插件",
+ "message": "安装前请检查 \"{name}\" ({id}) 的权限。",
+ "permissions": "请求的权限",
+ "permissions_hint": "取消勾选您不想授予的任何权限。被拒绝的功能在运行时将不可用。",
+ "grant": "允许",
+ "network_endpoints": "外部网络端点",
+ "network_endpoints_blocked": "未授予网络访问权限。这些 URL 将保持被阻止。",
+ "network_endpoints_unknown": "此插件请求网络访问但未声明具体端点。",
+ "cancel": "取消",
+ "confirm": "安装",
+ "close": "关闭",
+ "signature": "签名",
+ "signature_unsigned": "未签名",
+ "signature_signed": "已签名",
+ "signature_trusted": "受信任的发布者",
+ "signature_invalid": "无效签名(安装被阻止)",
+ "trust_publisher": "信任此发布者",
+ "security_findings": "安全发现"
},
"sideband": {
- "title": "Sideband plugins",
- "description": "Optional Sideband-compatible Python plugins loaded from a directory. They run in-process with full host access when enabled.",
- "master_enable": "Enable Sideband plugin loader (dangerous)",
- "command_enable": "Enable Sideband command plugins",
- "path": "Plugin directory path",
- "save": "Save Sideband settings",
- "reload": "Reload Sideband plugins",
- "loaded": "Loaded Sideband plugins",
- "saved": "Sideband plugin settings saved",
- "reloaded": "Sideband plugins reloaded",
- "danger_confirm": "Sideband plugins run as full Python code inside MeshChatX with filesystem, network, and LXMF access. Enable only if you trust every script in the directory."
+ "title": "Sideband插件",
+ "description": "从目录加载的可选Sideband兼容Python插件。启用后,它们将在进程中运行并具有完整的主机访问权限。",
+ "master_enable": "启用Sideband插件加载器(危险)",
+ "command_enable": "启用Sideband命令插件",
+ "path": "插件目录路径",
+ "save": "保存Sideband设置",
+ "reload": "重新加载Sideband插件",
+ "loaded": "已加载的Sideband插件",
+ "saved": "Sideband插件设置已保存",
+ "reloaded": "Sideband插件已重新加载",
+ "danger_confirm": "Sideband插件作为完整Python代码在MeshChatX内部运行,具有文件系统、网络和LXMF访问权限。仅当您信任目录中的每个脚本时才启用。"
}
},
"selftest": {
"title": "系统自检",
- "description": "Run diagnostic checks for the network stack, database, identity, imports, storage, LXMF, subprocess/run-module, SQLite, identity files, loopback TCP, unicode paths, RNode helpers, bot launcher argv, HTTP status/config/health/auth/bots/security/interfaces/reticulum-instance/identities/favourites/telephone/plugins/sideband/RRC APIs, plugin runtime, WebSocket, RNS Link API, and bot lifecycle.",
+ "description": "对网络栈、数据库、身份、导入、存储、LXMF、子进程/运行模块、SQLite、身份文件、环回 TCP、Unicode 路径、RNode 助手、Bot 启动器参数、HTTP 状态/配置/健康/认证/Bot/安全/接口/Reticulum 实例/身份/收藏/电话/插件/Sideband/RRC API、插件运行时、WebSocket、RNS 链接 API 和 Bot 生命周期运行诊断检查。",
"run_test_btn": "运行诊断",
"running": "正在运行诊断...",
"stack_up": "网络栈",
"config_good": "配置完整性",
"db_good": "数据库连接",
"read_write": "存储读/写",
- "identity_good": "Identity Loaded",
- "imports_good": "Critical Imports",
- "storage_lock_good": "Storage Lock",
- "temp_fs_good": "Temp Filesystem",
- "public_assets_good": "Public Assets",
- "lxmf_router_good": "LXMF Router",
- "subprocess_good": "Subprocess Spawn",
- "run_module_good": "MeshChatX Run-Module",
- "sqlite_roundtrip": "SQLite Roundtrip",
- "identity_roundtrip": "Identity File Roundtrip",
- "loopback_tcp": "Loopback TCP Bind",
- "unicode_path_good": "Unicode Path I/O",
- "rnode_support_good": "RNode Support Module",
- "bot_launcher_good": "Bot Launcher Argv",
- "http_status_good": "HTTP Status",
- "http_app_info_good": "HTTP App Info",
- "http_config_good": "HTTP Config",
- "http_db_health_good": "HTTP Database Health",
- "http_auth_csrf_good": "HTTP Auth CSRF",
- "http_bots_status_good": "HTTP Bots Status",
- "http_security_good": "HTTP Server Security",
- "http_interfaces_good": "HTTP RNS Interfaces",
- "http_identities_good": "HTTP Identities",
- "http_favourites_good": "HTTP Favourites",
- "http_telephone_good": "HTTP Telephone Status",
+ "identity_good": "身份已加载",
+ "imports_good": "关键导入",
+ "storage_lock_good": "存储锁",
+ "temp_fs_good": "临时文件系统",
+ "public_assets_good": "公共资源",
+ "lxmf_router_good": "LXMF 路由器",
+ "subprocess_good": "子进程生成",
+ "run_module_good": "MeshChatX 运行模块",
+ "sqlite_roundtrip": "SQLite 往返测试",
+ "identity_roundtrip": "身份文件往返",
+ "loopback_tcp": "环回 TCP 绑定",
+ "unicode_path_good": "Unicode 路径 I/O",
+ "rnode_support_good": "RNode 支持模块",
+ "bot_launcher_good": "Bot 启动器参数",
+ "http_status_good": "HTTP 状态",
+ "http_app_info_good": "HTTP 应用信息",
+ "http_config_good": "HTTP 配置",
+ "http_db_health_good": "HTTP 数据库健康",
+ "http_auth_csrf_good": "HTTP 认证 CSRF",
+ "http_bots_status_good": "HTTP Bot 状态",
+ "http_security_good": "HTTP 服务器安全",
+ "http_interfaces_good": "HTTP RNS 接口",
+ "http_identities_good": "HTTP 身份",
+ "http_favourites_good": "HTTP 收藏",
+ "http_telephone_good": "HTTP 电话状态",
"websocket_good": "WebSocket",
"bots_lifecycle": "机器人 创建 / 启动 / 停止 / 删除",
"passed": "已通过",
@@ -824,17 +824,17 @@
"status_label": "状态",
"reason_label": "原因",
"checks_completed": "所有检查已成功通过。",
- "http_reticulum_instance_good": "HTTP RNS Instance Settings",
+ "http_reticulum_instance_good": "HTTP RNS 实例设置",
"expand_reason": "显示失败详情",
"collapse_reason": "隐藏失败详情",
- "http_plugins_good": "HTTP Plugins API",
- "http_plugins_trust_good": "HTTP Plugin Trust List",
- "http_sideband_plugins_good": "HTTP Sideband Plugins",
- "http_sideband_config_good": "HTTP Sideband Config",
- "http_rrc_hubs_good": "HTTP RRC Hubs",
- "http_rrc_servers_good": "HTTP RRC Servers",
- "plugins_runtime_good": "Plugin Manager Runtime",
- "websocket_rns_link_good": "WebSocket RNS Link API"
+ "http_plugins_good": "HTTP 插件 API",
+ "http_plugins_trust_good": "HTTP 插件信任列表",
+ "http_sideband_plugins_good": "HTTP Sideband 插件",
+ "http_sideband_config_good": "HTTP Sideband 配置",
+ "http_rrc_hubs_good": "HTTP RRC 集线器",
+ "http_rrc_servers_good": "HTTP RRC 服务器",
+ "plugins_runtime_good": "插件管理器运行时",
+ "websocket_rns_link_good": "WebSocket RNS 链接 API"
},
"maintenance": {
"title": "数据维护",
@@ -1153,7 +1153,7 @@
"find_more_nodes": "查找更多节点",
"quick_import": "快速导入",
"quick_import_paste_hint": "粘贴原始配置",
- "quick_import_placeholder": "[Interface Name]\ntype = TCPClientInterface\ntarget_host = 1.2.3.4",
+ "quick_import_placeholder": "[接口名称]\ntype = TCPClientInterface\ntarget_host = 1.2.3.4",
"quick_import_apply": "应用:{name}",
"discovered_network_name": "网络名称",
"discovered_passphrase": "口令",
@@ -1293,41 +1293,41 @@
"geolocation_not_supported": "您的浏览器不支持地理位置",
"no_nodes_location": "未找到该位置的节点",
"failed_fetch_nodes": "获取已发现的地图节点失败",
- "share_view": "Share map view (copy links)",
- "share_message_prefix": "MeshChatX map:",
- "share_copied": "Map links copied to clipboard",
- "ping_here": "Ping here (send in chat)",
- "ping_here_toolbar": "Ping map center in chat",
- "ping_modal_title": "Send map ping",
- "ping_destination": "Destination",
- "ping_pick_conversation": "Choose a conversation",
- "ping_send": "Send ping",
- "ping_sent": "Map ping sent",
- "ping_failed": "Could not send map ping",
- "ping_invalid_destination": "Pick a valid 32-character destination hash",
- "ping_message_prefix": "MeshChatX map ping:",
- "north_up": "North is up (map not rotated)",
- "export_tile_limit_exceeded": "Too many tiles for one export. Lower max zoom or shrink the area.",
- "export_region_world": "World (low zoom)",
- "export_region_europe": "Europe",
- "export_region_north_america": "North America",
- "export_region_south_america": "South America",
- "export_region_africa": "Africa",
- "export_region_asia": "Asia",
- "export_region_oceania": "Oceania",
+ "share_view": "分享地图视图(复制链接)",
+ "share_message_prefix": "MeshChatX 地图:",
+ "share_copied": "地图链接已复制到剪贴板",
+ "ping_here": "在此处发送位置标记(在聊天中发送)",
+ "ping_here_toolbar": "在聊天中发送地图中心标记",
+ "ping_modal_title": "发送地图标记",
+ "ping_destination": "目的地",
+ "ping_pick_conversation": "选择一个对话",
+ "ping_send": "发送标记",
+ "ping_sent": "地图标记已发送",
+ "ping_failed": "无法发送地图 ping",
+ "ping_invalid_destination": "请选择一个有效的32字符目标哈希",
+ "ping_message_prefix": "MeshChatX 地图标记:",
+ "north_up": "北向上(地图未旋转)",
+ "export_tile_limit_exceeded": "一次导出瓦片过多。请降低最大缩放级别或缩小区域。",
+ "export_region_world": "世界(低缩放)",
+ "export_region_europe": "欧洲",
+ "export_region_north_america": "北美洲",
+ "export_region_south_america": "南美洲",
+ "export_region_africa": "非洲",
+ "export_region_asia": "亚洲",
+ "export_region_oceania": "大洋洲",
"vector_exchange_title": "GeoJSON / KML / KMZ",
- "vector_exchange_merge": "Merge with existing drawings (uncheck to replace)",
+ "vector_exchange_merge": "与现有绘图合并(取消勾选以替换)",
"vector_exchange_hint": "导入支持多种格式的图标,包括 GeoJSON 和 KML。选择一个绘图以查看其元数据。",
- "vector_import_geojson": "Import GeoJSON",
- "vector_import_kml": "Import KML",
- "vector_import_kmz": "Import KMZ",
- "vector_export_geojson": "Export GeoJSON",
- "vector_export_kml": "Export KML",
- "vector_export_kmz": "Export KMZ",
- "vector_import_ok": "Imported {count} feature(s).",
- "vector_import_empty": "No features found in file.",
- "vector_import_failed": "Could not read vector file.",
- "vector_export_ok": "Export started.",
+ "vector_import_geojson": "导入 GeoJSON",
+ "vector_import_kml": "导入 KML",
+ "vector_import_kmz": "导入 KMZ",
+ "vector_export_geojson": "导出 GeoJSON",
+ "vector_export_kml": "导出 KML",
+ "vector_export_kmz": "导出 KMZ",
+ "vector_import_ok": "已导入 {count} 个要素。",
+ "vector_import_empty": "文件中未找到要素。",
+ "vector_import_failed": "无法读取矢量文件。",
+ "vector_export_ok": "导出已开始。",
"drop_geo_files": "将地图文件拖放到此处",
"drop_map_files_hint": "GeoJSON、KML、KMZ 或 MBTiles",
"drop_no_geo_files": "未检测到 GeoJSON、KML 或 KMZ 文件。",
@@ -1508,11 +1508,11 @@
"failed_copy_message": "无法复制消息",
"failed_send_ingest": "发送摄取请求失败",
"address_copied": "您的 LXMF 地址已复制到剪贴板",
- "map_link_share_title": "Shared map view",
- "map_link_ping_title": "Map ping",
- "map_link_open": "Open on map",
- "map_link_copy_uri": "Copy meshchatx link",
- "map_link_copied": "Map link copied",
+ "map_link_share_title": "共享地图视图",
+ "map_link_ping_title": "地图 Ping",
+ "map_link_open": "在地图上打开",
+ "map_link_copy_uri": "复制 MeshChatX 链接",
+ "map_link_copied": "地图链接已复制",
"hash_copied": "身份哈希已复制到剪贴板",
"failed_to_copy_hash": "复制身份哈希失败",
"copy_hash": "复制哈希",
@@ -1590,23 +1590,23 @@
"snr_val": "SNR:{snr} dB",
"reply": "回复",
"replying_to": "回复给",
- "forward_banner_label": "Forwarded message",
- "forward_you_shared": "You're forwarding this quote",
- "forward_pick_recipient_title": "Forward to contact",
- "forward_message": "Forward",
- "forward_sent": "Message forwarded",
- "forward_failed": "Could not forward message",
- "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
- "forward_verify_show": "Source and verification",
- "forward_verify_hide": "Hide verification",
+ "forward_banner_label": "转发的消息",
+ "forward_you_shared": "你正在转发这条引用",
+ "forward_pick_recipient_title": "转发给联系人",
+ "forward_message": "转发",
+ "forward_sent": "消息已转发",
+ "forward_failed": "无法转发消息",
+ "forward_no_lxmf_destination": "此联系人没有可用的 LXMF 投递地址。",
+ "forward_verify_show": "来源和验证",
+ "forward_verify_hide": "隐藏验证",
"forward_verify_explanation": "Paper LXMF 链接仅在完整消息可用且符合 Paper 限制时有效。引用的片段可能被伪造。",
- "forward_verify_loading": "Looking up verification URI…",
- "forward_verify_open_uri": "Open verification URI",
- "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
- "forward_verify_not_cached": "Original message bytes are not cached here.",
- "forward_verify_failed": "Verification lookup failed.",
- "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
- "forward_open_party_is_self": "That is your own address.",
+ "forward_verify_loading": "正在查找验证 URI…",
+ "forward_verify_open_uri": "打开验证 URI",
+ "forward_verify_unavailable": "原始消息字节未在此处缓存,因此无法构建验证 URI。",
+ "forward_verify_not_cached": "原始消息字节未在此处缓存。",
+ "forward_verify_failed": "验证查找失败。",
+ "forward_content_stub": "_通过 MeshChatX 转发_\n附件和引用文本属于原始发送者。",
+ "forward_open_party_is_self": "那是您自己的地址。",
"message_actions": "消息操作",
"save_image_to_device": "保存图片到设备",
"cancel_send": "取消发送",
@@ -1650,8 +1650,8 @@
"nomad_micron_wasm_desc_before_link": "Optional WASM renderer (",
"nomad_micron_wasm_link_label": "micron-parser-go",
"nomad_micron_wasm_desc_after_link": "): faster when supported; falls back to bundled JS. Off keeps JS only.",
- "nomad_micron_default_engine_title": "Default Micron renderer (.mu)",
- "nomad_micron_default_engine_desc": "JavaScript is the default. WebAssembly uses micron-parser-go when the engine above is enabled and the module has loaded.",
+ "nomad_micron_default_engine_title": "默认 Micron 渲染器 (.mu)",
+ "nomad_micron_default_engine_desc": "JavaScript 是默认选项。当上述引擎启用且模块已加载时,WebAssembly 使用 micron-parser-go。",
"nomad_micron_default_engine_option_js": "JavaScript (micron-parser)",
"nomad_micron_default_engine_option_wasm": "WebAssembly (micron-parser-go)",
"micron_wasm_update_open_btn": "更新 WASM 引擎…",
@@ -1678,22 +1678,22 @@
"micron_wasm_update_toast_uploaded": "已从您的文件安装 WASM。",
"micron_wasm_update_toast_reverted": "已恢复为打包的 Micron WASM。",
"tabs": {
- "general": "General",
- "general_desc": "Language, appearance, and platform",
- "messages": "Messages",
- "messages_desc": "LXMF, stickers, and safety",
- "network": "Network",
- "network_desc": "Transport, interfaces, and discovery",
+ "general": "通用",
+ "general_desc": "语言、外观和平台",
+ "messages": "消息",
+ "messages_desc": "LXMF、贴纸和安全",
+ "network": "网络",
+ "network_desc": "传输、接口和发现",
"nomad": "Nomad",
- "nomad_desc": "Archiver and page rendering",
- "privacy": "Privacy",
- "privacy_desc": "Data, access, and security",
- "maintenance": "Maintenance",
- "maintenance_desc": "Cleanup, export, and import",
+ "nomad_desc": "存档器和页面渲染",
+ "privacy": "隐私",
+ "privacy_desc": "数据、访问和安全",
+ "maintenance": "维护",
+ "maintenance_desc": "清理、导出和导入",
"plugins": "插件",
"plugins_desc": "安装和管理 MeshChatX 插件"
},
- "failed_update_reticulum_instance": "Failed to update Reticulum instance settings!"
+ "failed_update_reticulum_instance": "更新 Reticulum 实例设置失败!"
},
"debug": {
"title": "调试日志",
@@ -1870,10 +1870,10 @@
"multiline_hint": "再次按下回车键以展开为多行",
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
- "renderer_chip_plaintext": "Text",
- "renderer_hint_markdown": "Markdown renderer",
- "renderer_hint_html": "Sanitized HTML",
- "renderer_hint_plaintext": "Escaped plain text",
+ "renderer_chip_plaintext": "文本",
+ "renderer_hint_markdown": "Markdown 渲染器",
+ "renderer_hint_html": "已清理的 HTML",
+ "renderer_hint_plaintext": "转义的纯文本",
"load_phase_default": "正在加载页面",
"load_phase_finding_path": "寻找通往节点的网络路径",
"load_phase_establishing_link": "建立与节点的链接",
@@ -1958,21 +1958,21 @@
"page_of": "{total_pages}第{page}页",
"export_mu": "导出.mu",
"export_selected_mu": "导出 .mu ({count})",
- "nodes_title": "Nodes",
- "snapshots_title": "Snapshots",
- "select_all": "Select all",
- "delete_selected": "Delete ({count})",
- "viewing_archive": "Viewing archive",
- "select_snapshot": "Select a snapshot to view",
- "open_live": "Open live",
- "search_nodes_placeholder": "Search nodes or content...",
- "no_results": "No results found",
- "no_archives": "No archives yet",
- "show_nodes": "Show nodes",
- "hide_nodes": "Hide nodes",
- "show_snapshots": "Show snapshots",
- "hide_snapshots": "Hide snapshots",
- "delete_snapshot": "Delete snapshot"
+ "nodes_title": "节点",
+ "snapshots_title": "快照",
+ "select_all": "全选",
+ "delete_selected": "删除({count})",
+ "viewing_archive": "查看存档",
+ "select_snapshot": "选择一个快照查看",
+ "open_live": "打开实时",
+ "search_nodes_placeholder": "搜索节点或内容...",
+ "no_results": "未找到结果",
+ "no_archives": "暂无存档",
+ "show_nodes": "显示节点",
+ "hide_nodes": "隐藏节点",
+ "show_snapshots": "显示快照",
+ "hide_snapshots": "隐藏快照",
+ "delete_snapshot": "删除快照"
},
"docs": {
"title": "文档",
@@ -2055,7 +2055,7 @@
},
"rnsh": {
"title": "RNSH",
- "description": "Manage persistent rnsh sessions"
+ "description": "管理持久的rnsh会话"
},
"rnstatus": {
"title": "状态",
@@ -2157,88 +2157,88 @@
"flow_no_rules": "无规则"
},
"message_blocklist": {
- "title": "Message blocklist",
- "description": "Auto-banish senders when their message or name matches a word or regex from your shared blocklist.",
- "beta_notice_title": "Beta (work in progress)",
- "beta_notice_body": "This tool is off until you turn it on. Words match regardless of case. Regex uses normal patterns. If something matches, the sender gets banished right away. Export a list to share with your group, or import one to merge or replace yours.",
- "enable_label": "Enable message blocklist",
- "enable_hint": "When disabled, entries are saved but no automatic banish runs.",
- "entries_heading": "Blocked phrases",
- "add_entry": "Add phrase",
- "empty_entries": "No phrases yet. Add entries or import a shared list.",
- "entry_enabled": "Active",
- "entry_placeholder": "spam phrase or regex pattern",
- "remove_entry": "Remove",
- "scope_label": "Applies to",
- "scope_everyone": "Everyone",
- "scope_contacts": "Contacts only",
- "scope_non_contacts": "Non-contacts only",
- "match_in_label": "Match in",
- "match_message": "Message title and body",
- "match_peer_fields": "Peer display name and contact fields",
- "match_mode_substring": "Word",
- "match_mode_regex": "Regex",
- "export": "Export",
- "import": "Import",
- "save": "Save",
- "saving": "Saving…",
- "revert": "Reload",
- "saved": "Blocklist saved",
- "save_failed": "Could not save blocklist",
- "load_failed": "Could not load blocklist",
- "enabled_toast": "Message blocklist enabled",
- "disabled_toast": "Message blocklist disabled",
- "exported": "Blocklist exported",
- "export_failed": "Could not export blocklist",
- "import_merge_confirm": "Merge with your current list? Choose Cancel to replace your list entirely.",
- "imported_merge": "Blocklist merged",
- "imported_replace": "Blocklist replaced",
- "import_failed": "Could not import blocklist"
+ "title": "消息黑名单",
+ "description": "当发送者的消息或名称与您的共享屏蔽列表中的单词或正则表达式匹配时,自动放逐发送者。",
+ "beta_notice_title": "Beta(开发中)",
+ "beta_notice_body": "此工具默认关闭,直到您启用它。匹配时不区分大小写。正则表达式使用标准模式。如果匹配,发送者将立即被放逐。导出列表与您的群组共享,或导入列表以合并或替换您的列表。",
+ "enable_label": "启用消息黑名单",
+ "enable_hint": "禁用时,条目会保存但不会自动执行放逐。",
+ "entries_heading": "屏蔽短语",
+ "add_entry": "添加短语",
+ "empty_entries": "暂无短语。添加条目或导入共享列表。",
+ "entry_enabled": "已激活",
+ "entry_placeholder": "垃圾短语或正则表达式",
+ "remove_entry": "移除",
+ "scope_label": "适用范围",
+ "scope_everyone": "所有人",
+ "scope_contacts": "仅联系人",
+ "scope_non_contacts": "仅非联系人",
+ "match_in_label": "匹配范围",
+ "match_message": "消息标题和正文",
+ "match_peer_fields": "对等方显示名称和联系人字段",
+ "match_mode_substring": "单词",
+ "match_mode_regex": "正则",
+ "export": "导出",
+ "import": "导入",
+ "save": "保存",
+ "saving": "保存中…",
+ "revert": "重新加载",
+ "saved": "黑名单已保存",
+ "save_failed": "无法保存黑名单",
+ "load_failed": "无法加载黑名单",
+ "enabled_toast": "消息黑名单已启用",
+ "disabled_toast": "消息屏蔽列表已禁用",
+ "exported": "黑名单已导出",
+ "export_failed": "无法导出黑名单",
+ "import_merge_confirm": "与当前列表合并?选择“取消”以完全替换列表。",
+ "imported_merge": "黑名单已合并",
+ "imported_replace": "黑名单已替换",
+ "import_failed": "无法导入黑名单"
},
"repository_server": {
"title": "软件仓库服务器",
"description": "通过明文 HTTP 重新分发 MeshChatX 与 Reticulum 相关 Python 安装包,以及您自己的文件,供局域网或本机下载。",
"subtitle": "刷新内置的软件包,添加您自己的文件,或为其他设备启动下载页面。",
- "back_tools": "Back to tools",
- "http_heading": "Plain HTTP mirror",
- "host_label": "Listen address",
- "port_label": "Port",
- "start_http": "Start",
- "stop_http": "Stop",
- "restart_http": "Restart",
- "http_listen_label": "Listening:",
- "open_http": "Open in browser",
- "http_started": "HTTP server started",
- "http_stopped": "HTTP server stopped",
- "http_restarted": "HTTP server restarted",
- "http_err_generic": "HTTP server request failed",
- "http_err_invalid_host": "Invalid listen address",
- "http_err_invalid_port": "Invalid port",
- "http_err_already_running": "HTTP server is already running",
- "http_err_bind_failed": "Could not bind (port in use or permission denied)",
- "upload_heading": "Upload file",
- "choose_file": "Choose file",
- "refresh_bundled_tooltip": "Download bundled wheels to this device (needs network)",
- "refresh_started": "Downloading bundled packages…",
- "refresh_fetching": "Getting {pkg}…",
- "refresh_ok": "Bundled wheels refreshed",
- "refresh_ok_count": "{n} packages downloaded",
- "refresh_failed": "Could not refresh bundled wheels",
- "refresh_pip_missing": "pip was not found on this system. Install pip and try again.",
- "refresh_partial": "Some packages could not be downloaded (details below)",
- "refresh_partial_toast": "Bundled download finished with some failures",
- "files_heading": "Files",
- "col_name": "Name",
- "col_source": "Source",
- "col_size": "Size",
- "empty": "No files yet. Upload a file or refresh bundled wheels.",
- "delete": "Delete",
- "delete_confirm": "Delete uploaded file \"{name}\"?",
- "delete_ok": "File removed",
- "delete_failed": "Could not delete file",
- "upload_ok": "File uploaded",
- "upload_failed": "Upload failed",
- "load_failed": "Could not load repository"
+ "back_tools": "返回工具",
+ "http_heading": "纯 HTTP 镜像",
+ "host_label": "监听地址",
+ "port_label": "端口",
+ "start_http": "启动",
+ "stop_http": "停止",
+ "restart_http": "重启",
+ "http_listen_label": "正在监听:",
+ "open_http": "在浏览器中打开",
+ "http_started": "HTTP 服务器已启动",
+ "http_stopped": "HTTP 服务器已停止",
+ "http_restarted": "HTTP 服务器已重启",
+ "http_err_generic": "HTTP 服务器请求失败",
+ "http_err_invalid_host": "无效的监听地址",
+ "http_err_invalid_port": "无效的端口",
+ "http_err_already_running": "HTTP 服务器已在运行",
+ "http_err_bind_failed": "无法绑定(端口被占用或权限不足)",
+ "upload_heading": "上传文件",
+ "choose_file": "选择文件",
+ "refresh_bundled_tooltip": "下载捆绑的 wheel 包到此设备(需要网络)",
+ "refresh_started": "正在下载捆绑包…",
+ "refresh_fetching": "正在获取 {pkg}…",
+ "refresh_ok": "捆绑的 wheel 包已刷新",
+ "refresh_ok_count": "已下载 {n} 个包",
+ "refresh_failed": "无法刷新捆绑的 wheel 包",
+ "refresh_pip_missing": "系统未找到 pip。请安装 pip 后重试。",
+ "refresh_partial": "部分包无法下载(详情如下)",
+ "refresh_partial_toast": "捆绑下载完成,但存在一些失败",
+ "files_heading": "文件",
+ "col_name": "名称",
+ "col_source": "来源",
+ "col_size": "大小",
+ "empty": "暂无文件。上传文件或刷新捆绑的轮子。",
+ "delete": "删除",
+ "delete_confirm": "删除已上传的文件“{name}”?",
+ "delete_ok": "文件已移除",
+ "delete_failed": "无法删除文件",
+ "upload_ok": "文件已上传",
+ "upload_failed": "上传失败",
+ "load_failed": "无法加载仓库"
},
"rnode_flasher": {
"title": "R 节点闪光器",
@@ -2350,11 +2350,11 @@
"failed_start_pairing": "启动配对失败:{error}",
"failed_set_rotation": "设置显示旋转失败:{error}",
"failed_start_reconditioning": "启动显示更新失败:{error}",
- "no_main_bin": "Could not locate the main firmware binary in the ZIP.",
- "invalid_host": "Please enter a valid host or IP address.",
- "bluetooth_flash_unsupported": "Bluetooth cannot be used to flash firmware. Use Serial or WiFi to flash, then return to Bluetooth for management.",
- "failed_diagnostics": "Failed to run diagnostics: {error}",
- "failed_detect_with_reason": "Failed to detect RNode: {error}"
+ "no_main_bin": "在 ZIP 文件中找不到主固件二进制文件。",
+ "invalid_host": "请输入有效的主机名或 IP 地址。",
+ "bluetooth_flash_unsupported": "蓝牙无法用于刷写固件。请使用串口或 WiFi 进行刷写,然后返回蓝牙进行管理。",
+ "failed_diagnostics": "运行诊断失败:{error}",
+ "failed_detect_with_reason": "检测 RNode 失败:{error}"
},
"alerts": {
"firmware_downloaded": "推荐的固件已下载并装入.",
@@ -2375,65 +2375,65 @@
"bluetooth_pairing_started": "开始对等模式( 30s)",
"rotation_updated": "更新轮调",
"reconditioning_started": "开始修复",
- "diagnostics_healthy": "Diagnostics: device looks healthy.",
- "diagnostics_issues": "Diagnostics: {count} issue(s) detected."
+ "diagnostics_healthy": "诊断:设备状态良好。",
+ "diagnostics_issues": "诊断:检测到 {count} 个问题。"
},
- "simple": "Simple",
- "advanced": "Advanced",
- "original": "Original",
- "open_original_tab": "Open the original flasher in a new tab",
- "bluetooth": "Bluetooth",
- "preparing_firmware": "Preparing firmware...",
- "uploading": "Uploading: {percentage}%",
- "select_firmware_file": "Or select a firmware file (.zip)",
- "wifi_help": "The IP address of your RNode on the local network.",
- "run_diagnostics": "Diagnostics",
+ "simple": "简易版",
+ "advanced": "高级",
+ "original": "原始版",
+ "open_original_tab": "在新标签页中打开原始刷写工具",
+ "bluetooth": "蓝牙",
+ "preparing_firmware": "正在准备固件...",
+ "uploading": "正在上传:{percentage}%",
+ "select_firmware_file": "或选择固件文件 (.zip)",
+ "wifi_help": "本地网络中您的RNode的IP地址。",
+ "run_diagnostics": "诊断",
"support": {
"serial": {
- "title": "USB serial is unavailable",
- "polyfill_not_loaded": "USB serial polyfill has not been loaded yet.",
+ "title": "USB 串口不可用",
+ "polyfill_not_loaded": "USB 串口 polyfill 尚未加载。",
"android_webview_no_serial": "Android 在此视图中不支持 Web Serial。请使用桌面浏览器或内置刷机工具。",
- "browser_unsupported": "This browser does not support Web Serial. Try Chrome, Edge, or another Chromium-based browser.",
- "android_use_chrome": "On Android, opening this page in Chrome lets you use Web Serial via WebUSB.",
- "unknown": "USB serial cannot be initialised in this environment."
+ "browser_unsupported": "此浏览器不支持 Web Serial。请尝试 Chrome、Edge 或其他基于 Chromium 的浏览器。",
+ "android_use_chrome": "在 Android 上,使用 Chrome 打开此页面可通过 WebUSB 使用 Web Serial。",
+ "unknown": "在此环境中无法初始化 USB 串口。"
},
"bluetooth": {
- "title": "Bluetooth is unavailable",
+ "title": "蓝牙不可用",
"android_bridge_not_implemented": "此处的 Web 蓝牙不可用。请使用系统蓝牙设置或不同的浏览器。",
- "browser_unsupported": "This browser does not support Web Bluetooth. Try Chrome or Edge.",
- "insecure_context": "Web Bluetooth requires a secure context (HTTPS or localhost).",
- "requires_https": "Open the flasher over HTTPS or via localhost to enable Bluetooth.",
- "unknown": "Bluetooth cannot be initialised in this environment."
+ "browser_unsupported": "此浏览器不支持 Web Bluetooth。请尝试 Chrome 或 Edge。",
+ "insecure_context": "Web Bluetooth 需要安全上下文(HTTPS 或 localhost)。",
+ "requires_https": "请通过 HTTPS 或 localhost 打开刷写工具以启用蓝牙。",
+ "unknown": "在此环境中无法初始化蓝牙。"
},
"actions": {
- "load_polyfill": "Load polyfill",
- "request_bluetooth": "Allow Bluetooth",
- "open_settings": "Open settings",
- "polyfill_loading": "Loading USB serial polyfill...",
- "bluetooth_requested": "Bluetooth permission requested."
+ "load_polyfill": "加载 polyfill",
+ "request_bluetooth": "允许蓝牙",
+ "open_settings": "打开设置",
+ "polyfill_loading": "正在加载 USB 串口 polyfill...",
+ "bluetooth_requested": "已请求蓝牙权限。"
}
},
"diagnostics": {
- "title": "Device Diagnostics",
- "healthy": "Healthy",
- "needs_attention": "Needs attention",
- "issues_detected": "Issues detected",
- "firmware_version": "Firmware",
- "platform": "Platform",
- "board": "Board",
- "provisioned": "Provisioned",
- "product": "Product",
- "model": "Model",
- "firmware_hash": "FW hash",
- "target_hash": "Target hash",
+ "title": "设备诊断",
+ "healthy": "健康",
+ "needs_attention": "需要注意",
+ "issues_detected": "检测到问题",
+ "firmware_version": "固件版本",
+ "platform": "平台",
+ "board": "主板",
+ "provisioned": "已配置",
+ "product": "产品",
+ "model": "型号",
+ "firmware_hash": "固件哈希",
+ "target_hash": "目标哈希",
"suggestions": {
- "not_provisioned": "EEPROM is not provisioned. Run step 3 (Provision EEPROM).",
- "firmware_hash_missing": "Firmware hash is missing. Run step 4 (Set Firmware Hash).",
- "firmware_hash_mismatch": "Firmware hash mismatch. Re-flash the firmware and re-run step 4.",
- "product_mismatch": "Selected product does not match the connected device.",
- "no_firmware_version": "Could not read firmware version. Try reconnecting the device.",
- "detect_failed": "Could not detect this RNode. Verify cable, port, and power.",
- "read_timeout": "Device did not respond in time. Try reconnecting or rebooting it."
+ "not_provisioned": "EEPROM 尚未配置。请运行步骤 3(配置 EEPROM)。",
+ "firmware_hash_missing": "固件哈希缺失。请运行步骤 4(设置固件哈希)。",
+ "firmware_hash_mismatch": "固件哈希不匹配。请重新刷写固件并重新运行步骤 4。",
+ "product_mismatch": "所选产品与连接的设备不匹配。",
+ "no_firmware_version": "无法读取固件版本。请尝试重新连接设备。",
+ "detect_failed": "无法检测到此 RNode。请检查线缆、端口和电源。",
+ "read_timeout": "设备未及时响应。请尝试重新连接或重启设备。"
}
}
},
@@ -2585,57 +2585,57 @@
"web_save_path_prompt": "输入运行 MeshChat(服务器)的机器上用于保存获取文件的绝对文件夹路径:"
},
"rnsh": {
- "remote_shell": "Remote shell",
- "usage_title": "Usage",
- "usage_hint": "Create connect or listen sessions, then manage them on the Sessions tab. Output streams live while MeshChatX is running.",
- "tab_sessions": "Sessions",
- "tab_connect": "Connect",
- "tab_listen": "Listen",
- "sessions": "Sessions",
- "refresh": "Refresh",
- "name": "Session name",
- "name_placeholder": "Ops shell",
- "listen_mode": "Listen",
- "destination_hash": "Destination hash",
+ "remote_shell": "远程 Shell",
+ "usage_title": "用法",
+ "usage_hint": "创建连接或监听会话,然后在“会话”标签页中管理它们。当 MeshChatX 运行时,输出流保持活动。",
+ "tab_sessions": "会话",
+ "tab_connect": "连接",
+ "tab_listen": "监听",
+ "sessions": "会话",
+ "refresh": "刷新",
+ "name": "会话名称",
+ "name_placeholder": "运维 Shell",
+ "listen_mode": "监听",
+ "destination_hash": "目标哈希",
"destination_placeholder": "7a55144adf826958a9529a3bcf08b149",
- "allowed_hashes": "Allowed identity hashes",
- "allowed_hashes_placeholder": "One hash per line",
- "remote_command": "Remote command",
- "default_command": "Default command",
+ "allowed_hashes": "允许的身份哈希",
+ "allowed_hashes_placeholder": "每行一个哈希",
+ "remote_command": "远程命令",
+ "default_command": "默认命令",
"command_placeholder": "/bin/bash --login",
- "mirror_exit_code": "Mirror exit code (-m)",
- "no_id": "No local identity (-N)",
- "create_and_start": "Create and start",
- "session_output": "Session output",
- "no_command_yet": "No command started yet",
- "start": "Start",
- "stop": "Stop",
- "clear": "Clear",
- "remove": "Remove",
- "send_line": "Send",
- "command_input_placeholder": "Type command input...",
- "status_running": "Running",
- "status_stopped": "Stopped",
- "status_failed": "Failed",
- "no_sessions": "No sessions created yet.",
- "unnamed_session": "Unnamed session",
- "select_or_create_session": "Select or create a session to begin.",
- "no_output_yet": "No output yet.",
- "destination_required": "Destination hash is required for connect mode.",
- "session_created": "Session created",
- "session_started": "Session started",
- "session_stopped": "Session stopped",
- "session_removed": "Session removed",
- "output_cleared": "Output cleared",
- "title": "RNSH - Reticulum Remote Shell",
- "description": "Manage persistent rnsh sessions",
- "failed_to_load_sessions": "Failed to load RNSH sessions",
- "failed_to_create_session": "Failed to create RNSH session",
- "failed_to_start_session": "Failed to start RNSH session",
- "failed_to_stop_session": "Failed to stop RNSH session",
- "failed_to_remove_session": "Failed to remove RNSH session",
- "failed_to_clear_output": "Failed to clear RNSH output",
- "failed_to_send_input": "Failed to send RNSH input",
+ "mirror_exit_code": "镜像退出码 (-m)",
+ "no_id": "无本地身份 (-N)",
+ "create_and_start": "创建并启动",
+ "session_output": "会话输出",
+ "no_command_yet": "尚未启动命令",
+ "start": "启动",
+ "stop": "停止",
+ "clear": "清除",
+ "remove": "移除",
+ "send_line": "发送",
+ "command_input_placeholder": "输入命令...",
+ "status_running": "运行中",
+ "status_stopped": "已停止",
+ "status_failed": "失败",
+ "no_sessions": "尚未创建会话。",
+ "unnamed_session": "未命名会话",
+ "select_or_create_session": "选择或创建一个会话以开始。",
+ "no_output_yet": "尚无输出。",
+ "destination_required": "连接模式需要目标哈希。",
+ "session_created": "会话已创建",
+ "session_started": "会话已启动",
+ "session_stopped": "会话已停止",
+ "session_removed": "会话已移除",
+ "output_cleared": "输出已清除",
+ "title": "RNSH - Reticulum 远程 Shell",
+ "description": "管理持久化 rnsh 会话",
+ "failed_to_load_sessions": "加载 RNSH 会话失败",
+ "failed_to_create_session": "创建 RNSH 会话失败",
+ "failed_to_start_session": "启动 RNSH 会话失败",
+ "failed_to_stop_session": "停止 RNSH 会话失败",
+ "failed_to_remove_session": "移除 RNSH 会话失败",
+ "failed_to_clear_output": "清除 RNSH 输出失败",
+ "failed_to_send_input": "发送 RNSH 输入失败",
"listening_on": "监听地址",
"waiting_for_address": "正在等待监听地址...",
"copy_address": "复制",
@@ -2644,13 +2644,13 @@
"config_dir": "Reticulum 配置目录",
"config_dir_placeholder": "默认使用应用的 Reticulum 配置",
"config_dir_hint": "留空以共享 MeshChatX 的 Reticulum 实例。仅在需要使用独立的 Reticulum 配置目录时才覆盖。",
- "tab_sessions_short": "Sessions",
- "tab_connect_short": "Connect",
- "tab_listen_short": "Listen",
- "fullscreen": "Full screen",
- "exit_fullscreen": "Exit full screen",
- "show_sessions": "Sessions",
- "hide_sessions": "Back to terminal"
+ "tab_sessions_short": "会话",
+ "tab_connect_short": "连接",
+ "tab_listen_short": "监听",
+ "fullscreen": "全屏",
+ "exit_fullscreen": "退出全屏",
+ "show_sessions": "会话",
+ "hide_sessions": "返回终端"
},
"rnprobe": {
"network_diagnostics": "网络诊断",
@@ -2824,8 +2824,8 @@
"local_tx": "本地(TX)",
"download_rx": "下载 RX",
"download_tx": "下载 TX",
- "minimize": "Minimize",
- "active": "Active",
+ "minimize": "最小化",
+ "active": "活跃",
"default_quality": "默认质量",
"active_call": "活动通话",
"status": "状态",
@@ -3099,10 +3099,10 @@
"bootstrap_added": "已添加 {count} 个引导接口",
"bootstrap_pick_at_least_one": "至少选择一个引导节点",
"failed_add_bootstrap": "添加引导接口失败",
- "failed_add_bootstrap_none": "No bootstrap interfaces were added. Check your selection and try again.",
- "failed_save_bootstrap_only": "Failed to save bootstrap-only preference",
- "failed_enable_propagation": "Failed to enable auto-propagation",
- "connect_mode_required": "Choose a connection mode to continue",
+ "failed_add_bootstrap_none": "未添加任何引导接口。请检查您的选择并重试。",
+ "failed_save_bootstrap_only": "保存仅引导偏好失败",
+ "failed_enable_propagation": "启用自动传播失败",
+ "connect_mode_required": "选择一种连接模式以继续",
"local_added": "添加本地自动接口",
"failed_add_local": "添加本地接口失败",
"failed_reload_rns": "重新加载 Reticulum 失败",
@@ -3127,7 +3127,7 @@
"footer_select": "选择",
"nav_messages": "消息",
"nav_messages_desc": "对话和 LXMF 收件箱",
- "nav_nomad": "Nomad Network",
+ "nav_nomad": "Nomad 网络",
"nav_nomad_desc": "浏览 Nomad Network 页面和服务",
"nav_map": "地图",
"nav_map_desc": "地理地图和图层",
@@ -3155,7 +3155,7 @@
"nav_forwarder_desc": "LXMF 转发规则",
"nav_documentation": "文档",
"nav_documentation_desc": "离线手册",
- "nav_repository_server": "Repository server",
+ "nav_repository_server": "仓库服务器",
"nav_repository_server_desc": "MeshChatX 安装包、Reticulum 软件包与您的文件(HTTP)",
"nav_micron_editor": "Micron 编辑器",
"nav_micron_editor_desc": "编辑 Micron 标记",
@@ -3356,20 +3356,20 @@
"presence_connection": "{count} 条连接事件"
},
"android_storage": {
- "setup_title": "Choose where MeshChatX stores data",
- "setup_desc": "File-manager storage is recommended. You can browse and back up your identity and messages under Android/data/com.meshchatx/files/. The app restarts when you change this during setup.",
- "setup_external_title": "File-manager storage (recommended)",
- "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — visible in many file managers.",
- "setup_internal_title": "Private app storage",
- "setup_internal_desc": "Hidden from file managers; only this app can access it.",
- "setup_continue": "Continue",
- "upgrade_title": "Move data to file-manager storage?",
- "upgrade_desc": "Your MeshChatX data is in private app storage. Copy it to the file-manager folder so you can browse and back up files, then restart the app.",
- "upgrade_copy": "Copy and restart",
- "upgrade_stay_internal": "Stay on private storage",
- "working": "Preparing…",
- "copy_restart_hint": "Copy scheduled. Closing the app — open MeshChatX again to finish.",
- "restart_to_apply": "Restart the app to apply your storage choice.",
- "failed": "Could not update storage location."
+ "setup_title": "选择MeshChatX存储数据的位置",
+ "setup_desc": "建议使用文件管理器存储。您可以在Android/data/com.meshchatx/files/下浏览和备份您的身份和消息。在设置过程中更改此项时,应用会重启。",
+ "setup_external_title": "文件管理器存储(推荐)",
+ "setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — 在许多文件管理器中可见。",
+ "setup_internal_title": "私有应用存储",
+ "setup_internal_desc": "对文件管理器隐藏;只有此应用可以访问。",
+ "setup_continue": "继续",
+ "upgrade_title": "将数据移动到文件管理器存储?",
+ "upgrade_desc": "您的MeshChatX数据位于私有应用存储中。将其复制到文件管理器文件夹,以便您可以浏览和备份文件,然后重启应用。",
+ "upgrade_copy": "复制并重启",
+ "upgrade_stay_internal": "保留在私有存储",
+ "working": "正在准备…",
+ "copy_restart_hint": "已安排复制。关闭应用后重新打开MeshChatX以完成操作。",
+ "restart_to_apply": "重启应用以应用存储选择。",
+ "failed": "无法更新存储位置。"
}
}


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────